The Senate voted to provide $70 billion for US military efforts in Iraq and Afghanistan, handing a victory to President George W Bush and his Republican allies on Capitol Hill.
The 70-25 roll call vote on Tuesday paved the way for the Senate to pass a $555 billion omnibus appropriations bill combining the war funding with the budgets for 14 Cabinet agencies, and demonstrated again Bush's ability to outmanoeuvre Democrats in Congress.
Bush was ready to sign the bill, assuming the war funding clears the House on Wednesday.
Democrats again failed to win votes to force removal of US troops or set a nonbinding target to remove most troops by the end of next year.
"Even those of us who have disagreed on this war have always agreed on one thing: Troops in the field will not be left without the resources they need," said Minority Leader Mitch McConnell, a Republican.
Twenty-one Democrats and Connecticut independent Joe Lieberman - who stood with Republicans at a post-vote news conference - voted with every Republican present except Gordon Smith of Oregon to approve the Iraq funding.
The year-end budget deal between the Democratic-controlled Congress and Bush ended months of battling and disappointed Republican purists who complained the bill spends too much money and contains about 9,000 pet projects sought by members of Congress.
The complicated legislative manoeuvre calls for the House to next clear the bill for Bush after a vote limited to the war funding, with Republicans supplying the winning margin.
The result would be a twin defeat for Democrats, who had vowed not to allow additional Iraq war funding without conditions and had spent months on legislation to add USD 27 billion to domestic programs.