South Africa were reduced to 111-3 in pursuit of a victory target of 303 at stumps on day three of the second Test against India at Kingsmead.
The Proteas made a strong start to their run chase, openers Graeme Smith and Alviro Petersen adding 63 in 12 overs.
But the tourists, trailing 1-0 in the three-match series, hit back either side of tea to leave the match firmly in the balance when bad light ended play early.
Seam bowler Shanthakumaran Sreesanth (2-30) removed Smith (37) and Hashim Amla (16), while off-spinner Harbhajan Singh (1-29) accounted for Petersen (26) in the space 25 balls.
Shortly after a stern exchange of words, Sreesanth had Smith caught from a top-edged pull to leave South Africa on 70-1 at tea.
And they lost two more wickets in the shortened evening session, Petersen offering a simple bat-pad catch to Cheteshwar Pujara at short-leg off Harbhajan's bowling and Amla wafting an edge through to Mahendra Singh Dhoni to give Sreesanth another scalp.
Jacques Kallis (12no) and AB de Villiers (17no) stood firm to see South Africa through to the close still 192 runs short of victory.
India had earlier advanced from 92-4 to 228 all out in their second innings, VVS Laxman last to go for 96.
Laxman, resuming on 23, marshalled the lower order in expert fashion after Pujara and Dhoni fell in the first hour.
Morne Morkel (3-47) made the opening breakthrough with the sixth ball of the day, Pujara failing to add to his overnight 10 before playing on via a weak defensive shot.
And Dhoni, having hit four boundaries in reaching 21, became Lonwabo Tsotsobe's (4-43) third victim of the innings when he nibbled behind after being drawn into playing at an angled delivery.
Harbhajan (4) followed not long after, edging behind off Kallis (1-30) as the visitors - whose lead was only just over the 200 mark at that stage - appeared to be losing their grip.
But Laxman, who went to his 49th Test half-century from 95 balls, and Zaheer Khan (27) put on 70 for the eighth wicket to revive the innings - although the latter was fortunate to survive an lbw appeal from Dale Steyn.
India went to lunch on 218-7 but quickly slumped to 228 all out upon the resumption, Laxman perishing when trying to reach his hundred by cutting for four and instead edged Steyn (2-60) behind to Boucher.