Bangladesh thrashed South Africa by seven wickets in the second ODI tie the three-match series at 1-1 after an inspired bowling performance saw the Proteas bundled out for 162, their lowest total against the hosts.
Teenage fast-bowler Mustafizur Rahman and off-spinner Nasir Hossain picked up three wickets each as the tourists were all out in 46 overs after winning the toss and opting to bat on a sluggish pitch at Mirpur.
Bangladesh lost two early wickets to Kagiso Rabada in their chase but opener Soumya Sarkar (88 not out) and Mahmudullah (50) added 135 for the third to ensure the hosts continued their fine form in the 50-over version of the game at home.
The hosts romped to the target with more than 22 overs to spare and the win also sealed their spot among the top eight-ranked nations for the 2017 Champions Trophy in England.
Bangladesh blanked Pakistan and then defeated twice world champions India in their last two ODI series and Sunday's victory was only their second in the format against South Africa, who won the first match of the series by eight wickets.
Rabada, who took six wickets on debut in the last match, gave South Africa some hope by dismissing Tamim Iqbal in his first over and Litton Das in his second but it was not enough.
Mahmudullah fell with Bangladesh four runs from victory and Sarkar took them over the line with a six off leg-spinner Imran Tahir. Left-handed Sarkar also hit 13 fours during his 79-ball unbeaten knock.
Earlier, the South African batsmen failed to find any momentum against the disciplined Bangladesh attack and managed to cross the 100-run mark only in the 32nd over.
Faf du Plessis was the highest scorer for South Africa with 41 while Farhaan Behardien's 36 ensured the team crossed the 150-run mark.
Chittagong will host the third and final ODI of the series on Wednesday.
South Africa 162 all out in 46 overs (du Plessis 41, Nasir 3-26)
Bangladesh 167-3 in 27.4 overs (Sarkar 88*, Rabada 2-45)