South Africa were reduced to 115 for three after 35 overs in their second innings when fading light forced the umpires to call stumps in the post-tea session.
The in-form Hashim Amla was unbeaten on a dogged 49 from 80 deliveries, inclusive of seven boundaries, while Ashwell Prince was yet to open his account.
The visitors need another 232 runs to avoid an innings defeat. Play will commence at 0845 IST on Day 5.
Fading light first forced the teams off the field towards the fag end of the post-lunch session. Soon it started raining and the covers came on. The umpires called an early tea break, with South Africa on 111 for three in 34 overs, and Amla unbeaten on 45 from 74 deliveries, inclusive of six boundaries.
The players returned after the rain subsided but were soon off again on account of fading light. With no improvement in visibility, the umpires decided to end play for the day.
Graeme Smith was the first to depart, trapped leg before wicket by Amit Mishra for 20.
His opening partner, debutant Alviro Petersen, fell soon after lunch, caught at short leg by S Badrinath off Harbhajan for 21 from 51 deliveries.
Jacques Kallis was out for 20 in the last over before play was stopped because of bad light. Mishra beat him all ends up with a sharp turning delivery that took the edge, which was neatly held by wicketkeeper Mahendra Singh Dhoni.
Earlier, the umpires carried out two inspections of the ground before play finally commenced at 1030 IST after a delay of nearly an hour-and-a-half because of wet ground conditions following overnight rain in Kolkata.
VVS Laxman and Mahendra Singh Dhoni had hit centuries in a record partnership before India declared their first innings on 643 for six in reply to South Africa's 296 all out.
India took a huge lead of 347 runs in their first innings after Virender Sehwag (165) and Sachin Tendulkar (106) had also registered centuries. This is India's highest total against South Africa, beating the 627 they scored at Chennai in 2007-08.
Laxman finished unbeaten on a splendid innings of 143 off 260 deliveries, inclusive of 16 boundaries, while Dhoni played a fluent innings of 132 from 187 deliveries, inclusive of 12 boundaries and three sixes. The duo were involved in an unbroken stand of 259 runs, a new record partnership for the seventh wicket. It bettered the 235-run stand between Ravi Shastri and Syed Kirmani against England at the Wankhede in 1984-85.
Morning session: (33 runs, 12.1 overs, 1 wicket)
Mild showers through the night in Kolkata, coupled with heavy overcast conditions, delayed the start of play on Day 4, much to the frustration of the Indian team.
The umpires carried out two inspections of the outfield before deciding that play would start at 1030 IST; they were hopeful of having around 82 overs bowled during the day.
South Africa started the day with a boundary, Graeme Smith edging one through the vacant slip region off Zaheer Khan. Interestingly, India decided to give the new ball to Harbhajan Singh, who started from the other end ahead of pacer Ishant Sharma.
Zaheer was unlucky not to pick an early wicket. He got the edge of Alviro Petersen's bat, but the ball flew just wide of VVS Laxman at second slip for a boundary, as South Africa reached 19 after five overs.
After bowling a probing spell of five overs during which he got the ball to move quite a bit, Zaheer returned to the pavilion. The left-armer pulled up on his follow through after bowling the final delivery of his fifth over and seemed to be struggling with some pain in his right leg.
It was Amit Mishra who provided the breakthrough, when he trapped Smith leg before wicket with his first delivery of the second innings. Smith tried to play one on the leg side but missed the ball and was struck right in front of the stumps after scoring 20 from 33 deliveries. (36-1, 12.1)
At lunch on day four, South Africa were 39 for one after 14 overs in their second innings, with Petersen on 17 from 41 deliveries and Hashim Amla yet to open his account.
With the weather playing spoilsport, the hosts are looking to claim as many wickets as possible on day four and not leave much to be done on the final day.
Post-lunch session: (72 runs, 20 overs, 1 wicket)
Harbhajan did not take long to strike after lunch. He claimed the wicket of Petersen for 21. The right-hander, who hit two boundaries in his 51-ball knock, was caught at short leg by S Badrinath. (54-2, 18)
Jacques Kallis was in no mood to sit back and defend and pulled a short delivery from Ishant for a boundary in the 19th over.
Harbhajan should have picked his second wicket but Murali Vijay at backward short leg failed to react in time to Amla's inside edge, in the 20th over.
South Africa tried to maintain a positive outlook despite the loss of their openers and both Amla and Kallis hit Zaheer for a boundary each in the first over of his new spell. Once again Zaheer seemed to be struggling with some injury as he bowled just one over after lunch before going back into the dressing room for some treatment.
The in-form Amla, who has already scored a double century and a century in his previous two innings, continued his good run with the bat and looked set for another big innings.
It was Mishra who struck once again, claiming the crucial wicket of Kallis, caught behind for 20. The veteran batsman, who hit three boundaries in his 47-ball knock, was beaten all ends up by a sharp, turning delivery from Mishra that he could only edge and was neatly held by wicketkeeper Dhoni. (111-3, 33.2)
At the end of the over, the light faded, forcing the two teams off the field. Soon it started raining, forcing the covers on to the field.
That also forced the umpires to call an early tea break, with South Africa on 111 for three in 34 overs, and Amla unbeaten on 45 from 74 deliveries, inclusive of six boundaries.
Post-tea session: (One over, four runs)
Play resumed after a break of 80 minutes even though conditions were overcast.
Amla stroked the first ball after the resumption, from Harbhajan, for a boundary through the vacant point region, in the 35th over.
Just one over was possible before the umpires offered the light to the South African batsmen, who gladly accepted it and walked back.
Amla was unbeaten on 49 from 80 deliveries, inclusive of seven boundaries, while Ashwell Prince was yet to open his account. South Africa were 115 for three after 35 overs when play was stopped.
The visitors will surely be delighted and hope for more rain on the fifth day.
Meanwhile, the Indian team can just hope and pray for uninterrupted play.