A 404 on a PUT means the “group of things” above the request failed the existence check. So if you get a 404 on object PUT it’s because the proxy failed the container existence check. If you get a 404 on a container PUT it’s because the proxy failed the account existence check.
Check the following:
1) are you running account_autocreate? You should, it is normally on by default 
2) are you running with 0 recheck_account_existence? ’cause that’s broken 
I’m curious if when you list/stat the account does it have any containers in it? Swift will lazy provision authorized accounts, and that code has been worked on in the last development cycle. If you have containers/objects in then the account definitely has a real physical data file and then it definitely exists – but if there’s no data in the account it can mean different things from a troubleshooting perspective. There may be some backend error talking to the account servers – if you’re unable to resolve the issue thoroughly examine any ERROR lines from /var/log/syslog for messages relating to problems connecting to account servers.
Actually account autocreate is not failing. Problem is with permission on /srv/[1-4]/. I corrected the permission and it’s solved now.