Bitcoin pools need to check data returned with getwork for validity (proper hashing result, etc.). Bitcoind that issues the initial getworks is also able to perform some data checking, but it might not be enough for pools (for example, it might not validate difficulty 1 shares used for crediting miners).
What getwork data checking is usually done on the bitcoind side, and which on the pool side? This would include:
- Checking message validity
- Checking if submitted work originated from the pool (whether block data was tempered with)
- Checking what difficulty the work solves (for generating shares and solving blocks)
- Check if work is acceptable as a block (for example, if timestamp is not too big)