India were 18 for one at tea on Friday, with Virender Sehwag out for eight when he edged Makhaya Ntini to Graeme Smith at first slip.
Needing a win to square the three-match series, South Africa batted aggressively despite losing six wickets for 44 runs at one stage before lunch.
Shaun Pollock made a stroke-filled 63 not out to enable South Africa to declare their second innings at 265 for eight.
There were nominally a maximum of 146 overs for India's second innings but bad light stopped play early on each of the first three days. Clouds were building up and the floodlights were switched on soon after the innings started.
Both Sehwag and Wasim Jaffer edged balls which fell short of the slip cordon and Sehwag edged one for four at catchable height through a vacant fourth slip, only to be caught off the next ball when he played forward defensively.
Indian captain Rahul Dravid edged Andre Nel just short of Andrew Hall at third slip before he had scored. He was on one at tea, with Jaffer on six.
Pollock shared quick-scoring half-century stands with Hall and Morne Morkel as South Africa recovered from a top order collapse.
Shanthakumuran Sreesanth, India's exciting young fast bowler, took three of the wickets as South Africa collapsed from 99 for no wicket to 143 for six. Sreesanth finished with four for 79, taking his tally for the series to 16.
VRV Singh made the first breakthrough, dismissing AB de Villiers for 47, but Sreesanth then took three wickets in eight balls to plunge the home team into trouble.
One of Sreesanth's victims was South African captain Graeme Smith, who emerged from a batting slump to make 58. Smith made his runs off 81 balls and hit 11 fours before trying to whip a straight ball through the leg side and having his off stump knocked back.
But Pollock regained the initiative for South Africa in a 99-ball innings which included 10 fours. Hall (21) helped him put on 70 in 68 minutes for the seventh wicket before Morkel (27) shared in a 52-run stand in 50 minutes for the eighth wicket.