OpenConnect csd-wrapper: ਲੌਗਇਨ ਤੋਂ ਪਹਿਲਾਂ ਸਕ੍ਰਿਪਟ ਦਾ ਆਡਿਟ ਕਰੋ
--csd-wrapper ਨੂੰ ਕੋਡ-ਨਿਸ਼ਪਾਦਨ ਦੀ ਸੀਮਾ ਮੰਨੋ: ਸਕ੍ਰਿਪਟ ਦਾ ਆਡਿਟ ਕਰੋ, ਇੱਕ ਵੱਖਰਾ csd ਉਪਭੋਗਤਾ ਚੁਣੋ ਅਤੇ ਪ੍ਰਮਾਣਿਤ ਕਰੋ ਕਿ ਗੇਟਵੇ ਅਸਲ ਵਿੱਚ ਕੀ ਦੇਖਦਾ ਹੈ।
ਪਰੋਫਾਈਲ ਵਿੱਚ --csd-wrapper ਜੋੜਨ ਨਾਲ ਸਥਾਨਕ ਸਕ੍ਰਿਪਟ ਉਸ ਡੈਮਨ ਨੂੰ ਮਿਲਦੀ ਹੈ ਜੋ ਲੌਗਇਨ ਦੌਰਾਨ ਇਸਨੂੰ ਚਲਾਉਂਦਾ ਹੈ, ਇਸ ਲਈ ਤੁਹਾਡੇ ਸਾਹਮਣੇ ਦਾ ਫੈਸਲਾ ਕੋਡ ਸਮੀਖਿਆ ਹੈ, ਤਰਜੀਹ ਟੌਗਲ ਨਹੀਂ। ਇਹ ਵਿਕਲਪ ਇਸ ਲਈ ਹੈ ਤਾਂ ਜੋ ਗੇਟਵੇ ਦੇ ਹੋਸਟ-ਜਾਂਚ ਹਿੱਸੇ ਨੂੰ ਬਦਲਿਆ ਜਾ ਸਕੇ, ਅਤੇ ਇਹ ਤੁਹਾਡੇ ਦਿੱਤੇ ਸਕ੍ਰਿਪਟ ਦਾ ਰਾਹ ਲੈਂਦਾ ਹੈ। ਹੇਠਾਂ ਸਭ ਕੁਝ ਇਹ ਮੰਨਦਾ ਹੈ ਕਿ ਤੈਨਾਤੀ ਦੇ ਮਾਲਕ ਨੇ ਪਹਿਲਾਂ ਹੀ ਦੱਸ ਦਿੱਤਾ ਹੈ ਕਿ ਕਿਹੜੀ ਪੋਸਚਰ ਜਾਂਚ ਲੋੜੀਂਦੀ ਹੈ; ਜੇ ਉਹ ਹਿੱਸਾ ਅਜੇ ਖੁੱਲ੍ਹਾ ਹੈ, ਤਾਂ ਪਹਿਲਾਂ ਉਸਨੂੰ ਨਿਪਟਾਓ। ਗਾਈਡ ਵਿੱਚ ਚਾਰ ਕਦਮ ਹਨ: ਅਸਫਲ ਹੋਇਆ ਪੜਾਅ ਲੱਭੋ, ਸਕ੍ਰਿਪਟ ਪੜ੍ਹੋ, ਉਹ ਪਛਾਣ ਚੁਣੋ ਜਿਸ ਅਧੀਨ ਇਹ ਚੱਲਦੀ ਹੈ, ਅਤੇ ਨਤੀਜਾ ਸਾਬਤ ਕਰੋ।
ਕਦਮ 1: ਅਸਫਲ ਹੋਇਆ ਪੜਾਅ ਲੱਭੋ
ਕਲਾਇੰਟ ਦਾ ਆਖਰੀ ਸੁਨੇਹਾ ਆਮ ਤੌਰ ’ਤੇ ਕੂਕੀ ਬਾਰੇ ਹੁੰਦਾ ਹੈ, ਜੋ ਜ਼ੰਜੀਰ ਦਾ ਅੰਤ ਹੈ, ਸ਼ੁਰੂਆਤ ਨਹੀਂ। HTTPS ਲੌਗਇਨ, ਸਰਵਰ ਸਰਟੀਫਿਕੇਟ ਜਾਂਚ, ਪ੍ਰਮਾਣੀਕਰਨ ਦਾ ਆਦਾਨ-ਪ੍ਰਦਾਨ ਅਤੇ ਪੋਸਚਰ ਹਿੱਸਾ ਸਭ ਉਸ ਸੁਨੇਹੇ ਤੋਂ ਪਹਿਲਾਂ ਹਨ।
ਵਰਤੀ ਜਾ ਰਹੀ ਸੰਸਕਰਣ ਅਤੇ ਲੌਗਇਨ ਪਤਾ ਨੋਟ ਕਰੋ, ਫਿਰ ਵਿਸਥਾਰਤ ਆਉਟਪੁੱਟ ਆਪਣੇ ਟਰਮੀਨਲ ’ਤੇ ਰੱਖਦਿਆਂ ਕੋਸ਼ਿਸ਼ ਦੁਹਰਾਓ। ਪਹਿਲੀ ਗਲਤੀ ਪੜ੍ਹੋ ਜੋ ਮੁੜ-ਕੋਸ਼ਿਸ਼ ਨਹੀਂ ਹੈ, ਟ੍ਰਾਂਸਕ੍ਰਿਪਟ ਦੀ ਆਖਰੀ ਲਾਈਨ ਨਹੀਂ। ਜੇ ਲੌਗ ਕਿਸੇ ਵੀ ਮੁਲਾਂਕਣ ਹਿੱਸੇ ਦਾ ਨਾਮ ਆਉਣ ਤੋਂ ਪਹਿਲਾਂ ਰੁਕ ਜਾਵੇ, ਤਾਂ ਰੈਪਰ ਅਜੇ ਤੁਹਾਡੀ ਸਮੱਸਿਆ ਨਹੀਂ ਹੈ। ਉਸ ਸਮੇਂ ਇਸਨੂੰ ਜੋੜਨਾ ਸਿਰਫ਼ ਉਹ ਸਤਹ ਚੌੜੀ ਕਰਦਾ ਹੈ ਜਿਸਦੀ ਤੁਹਾਨੂੰ ਬਾਅਦ ਵਿੱਚ ਰੱਖਿਆ ਕਰਨੀ ਪਵੇਗੀ।
openconnect --version
openconnect --verbose --user="$VPN_USER" vpn.example.com </dev/nullਟ੍ਰਾਂਸਕ੍ਰਿਪਟ ਸਥਾਨਕ ਰੱਖੋ, ਕਿਉਂਕਿ ਕੂਕੀਜ਼ ਅਤੇ ਪ੍ਰਮਾਣੀਕਰਨ ਜਵਾਬ ਪਹੁੰਚ ਸਮੱਗਰੀ ਹਨ। ਚੈਟ ਥ੍ਰੈਡ ਵਿੱਚ ਪੇਸਟ ਕੀਤਾ ਟ੍ਰੇਸ ਪ੍ਰਮਾਣ-ਪੱਤਰ ਦੀ ਲੀਕ ਹੈ, ਭਾਵੇਂ ਮੁਲਾਂਕਣ ਕਦਮ ਨਿਰਦੋਸ਼ ਲੱਗੇ। ਗਲਤੀ ਦਾ ਟੈਕਸਟ ਅਤੇ ਫਲੋ ਵਿੱਚ ਉਹ ਬਿੰਦੂ ਸਾਂਝਾ ਕਰੋ ਜਿੱਥੇ ਇਹ ਦਿਖਿਆ, ਪੇਲੋਡ ਕਦੇ ਨਹੀਂ।
ਕਦਮ 2: ਸਕ੍ਰਿਪਟ ਪਰੋਫਾਈਲ ਵਿੱਚ ਜਾਣ ਤੋਂ ਪਹਿਲਾਂ ਪੜ੍ਹੋ
ਰੈਪਰ ਉੱਨਾ ਹੀ ਭਰੋਸੇਯੋਗ ਹੈ ਜਿੰਨੀ ਤੁਹਾਡੀ ਸਮੀਖਿਆ ਕੀਤੀ ਸੰਸਕਰਣ, ਇਸ ਲਈ ਉਹ ਸੰਸਕਰਣ ਪਿੰਨ ਕਰੋ ਅਤੇ ਇਸਦਾ ਹੈਸ਼ ਮਨਜ਼ੂਰੀ ਨੋਟ ਦੇ ਕੋਲ ਰੱਖੋ। ਹੇਠਾਂ ਦਿੱਤੇ ਦੋ ਕਮਾਂਡ ਇੱਕ ਵੀ ਲਾਈਨ ਪੜ੍ਹਨ ਤੋਂ ਪਹਿਲਾਂ ਤੁਹਾਨੂੰ ਫਿੰਗਰਪ੍ਰਿੰਟ ਅਤੇ ਸਸਤੀ ਸਿੰਟੈਕਸ ਜਾਂਚ ਦਿੰਦੇ ਹਨ। ਇਹ ਅਗਲੇ ਵਿਅਕਤੀ ਨੂੰ ਸਥਿਰ ਹਵਾਲਾ ਵੀ ਦਿੰਦੇ ਹਨ, ਜੋ ਉਦੋਂ ਮਹੱਤਵਪੂਰਨ ਹੁੰਦਾ ਹੈ ਜਦੋਂ ਫਾਈਲ ਪੈਕੇਜ ਪ੍ਰਬੰਧਨ ਤੋਂ ਬਾਹਰ ਰਹਿੰਦੀ ਹੈ। ਕੋਈ ਵੀ ਕਮਾਂਡ ਇਹ ਨਹੀਂ ਦੱਸਦੀ ਕਿ ਸਕ੍ਰਿਪਟ ਕੀ ਕਰਦੀ ਹੈ, ਇਸ ਲਈ ਇਹਨਾਂ ਨੂੰ ਚਲਾਓ ਅਤੇ ਪੜ੍ਹਦੇ ਰਹੋ।
sha256sum ./vpn-csd-wrapper.sh
bash -n ./vpn-csd-wrapper.shਪੂਰੀ ਫਾਈਲ ਚਾਰ ਸਵਾਲ ਮਨ ਵਿੱਚ ਰੱਖ ਕੇ ਪੜ੍ਹੋ: ਕੀ ਇਹ ਬਾਹਰ ਜਾਣ ਵਾਲੀਆਂ HTTP ਕਾਲਾਂ ਕਰਦੀ ਹੈ, ਕੀ ਇਹ ਪ੍ਰਮਾਣ-ਪੱਤਰ ਫਾਈਲਾਂ ਜਾਂ ਵਾਤਾਵਰਣ ਚਰ ਪੜ੍ਹਦੀ ਹੈ, ਕੀ ਇਹ ਅਸਥਾਈ ਡਾਇਰੈਕਟਰੀ ਤੋਂ ਬਾਹਰ ਲਿਖਦੀ ਹੈ, ਅਤੇ ਕੀ ਕੋਈ ਸ਼ਾਖਾ ਕੁਝ ਵੀ ਨਾ ਮਾਪ ਕੇ ਪਾਸ ਪੋਸਚਰ ਦੀ ਰਿਪੋਰਟ ਕਰਦੀ ਹੈ। ਉਹ ਆਖਰੀ ਪੈਟਰਨ ਲੌਗ ਲਾਈਨ ਨਾਲ ਜੁੜਿਆ ਨੀਤੀ ਬਾਈਪਾਸ ਹੈ। ਕਾਪੀ ਕੀਤੇ ਰੈਪਰ ਇਸਨੂੰ ਭਰੋਸੇਯੋਗ ਦਿਖਣ ਵਾਲੀ ਜਾਂਚ ਦੇ ਪਿੱਛੇ ਲੁਕਾਉਂਦੇ ਹਨ। ਜੇ ਸਕ੍ਰਿਪਟ ਡਿਵਾਈਸ ਨੂੰ ਵੇਖਣ ਤੋਂ ਪਹਿਲਾਂ ਹੀ ਤੈਅ ਕਰ ਦਿੰਦੀ ਹੈ ਕਿ ਡਿਵਾਈਸ ਠੀਕ ਹੈ, ਤਾਂ ਉੱਥੇ ਹੀ ਰੁਕੋ।
ਪੈਕ ਕੀਤੇ ਪੇਲੋਡ ਵੀ ਜਾਂਚੋ, ਕਿਉਂਕਿ ਪੜ੍ਹਨ ਯੋਗ ਹੈਡਰ ਫਾਈਲ ਦੇ ਬਾਕੀ ਹਿੱਸੇ ਬਾਰੇ ਕੁਝ ਸਾਬਤ ਨਹੀਂ ਕਰਦਾ। ਫੋਰਮ ਥ੍ਰੈਡ ਤੋਂ ਸਕ੍ਰਿਪਟ ਡਾਊਨਲੋਡ ਕਰਨਾ ਇਸਨੂੰ ਭਰੋਸੇਯੋਗ ਨਹੀਂ ਬਣਾਉਂਦਾ, ਸਿਰਫ਼ ਇਸ ਲਈ ਕਿ ਇਸਦਾ ਨਾਮ ਅਸਲੀ ਹੋਸਟ-ਜਾਂਚ ਹਿੱਸੇ ਵਰਗਾ ਲੱਗਦਾ ਹੈ। ਕਿਸਨੇ ਇਹ ਸਥਾਪਿਤ ਕੀਤਾ, ਕਿੱਥੋਂ ਆਇਆ ਅਤੇ ਕਿਵੇਂ ਅੱਪਡੇਟ ਹੋਵੇਗਾ, ਨੋਟ ਕਰੋ।
grep -nE 'base64 -d|xxd -r|eval |curl |wget ' ./vpn-csd-wrapper.shਕਦਮ 3: ਰੈਪਰ ਕਿਸ ਪਛਾਣ ਅਧੀਨ ਚੱਲਦਾ ਹੈ ਚੁਣੋ
--csd-user CSD, TNCC ਜਾਂ HIP ਪ੍ਰੋਗਰਾਮ ਚੱਲਣ ਦੌਰਾਨ ਵਿਸ਼ੇਸ਼ ਅਧਿਕਾਰ ਘਟਾਉਂਦਾ ਹੈ। ਉਹ ਖਾਤਾ ਸਥਾਨਕ ਨਿਸ਼ਪਾਦਨ ਪ੍ਰਬੰਧ ਦਾ ਹਿੱਸਾ ਹੈ, ਗੇਟਵੇ ਨੂੰ ਭੇਜਿਆ ਉਪਭੋਗਤਾ ਨਾਮ ਨਹੀਂ।
ਰੈਪਰ ਨੂੰ ਸਮਰਪਿਤ ਖਾਤਾ ਦਿਓ ਜਿਸ ਵਿੱਚ ਕੋਈ ਇੰਟਰਐਕਟਿਵ ਸ਼ੈੱਲ ਨਹੀਂ, sudo ਅਧਿਕਾਰ ਨਹੀਂ ਅਤੇ ਲੋੜੀਂਦੀ ਨਾ ਹੋਣ ਵਾਲੀ ਗਰੁੱਪ ਮੈਂਬਰਸ਼ਿਪ ਨਹੀਂ। ਸਕ੍ਰਿਪਟ ਅਤੇ ਇਸ ਦੁਆਰਾ ਜਾਂਚੀਆਂ ਜਾਣ ਵਾਲੀਆਂ ਖਾਸ ਫਾਈਲਾਂ ’ਤੇ ਪੜ੍ਹਨ ਦੀ ਪਹੁੰਚ ਦਿਓ, ਫਿਰ VPN ਪਰੋਫਾਈਲ ਨੂੰ ਛੂਹਣ ਤੋਂ ਪਹਿਲਾਂ ਅਧਿਕਾਰ ਘਟਾਉਣ ਦੀ ਪਰਖ ਕਰੋ। ਇੱਥੇ ਸਮੱਸਿਆ ਲੱਭਣਾ ਕਲਾਇੰਟ ਦੇ ਅੰਦਰ ਲੱਭਣ ਨਾਲੋਂ ਸਸਤਾ ਹੈ।
sudo -u vpn-csd /usr/local/libexec/vpn-csd-wrapper.shਵਿਸ਼ੇਸ਼ ਅਧਿਕਾਰ ਘਟਾਉਣਾ ਉਸ ਨੁਕਸਾਨ ਨੂੰ ਸੀਮਤ ਕਰਦਾ ਹੈ ਜੋ ਖਰਾਬ ਸਕ੍ਰਿਪਟ ਕਰ ਸਕਦੀ ਹੈ। ਪਰ ਇਹ ਕੋਡ ਦੀ ਸਮੀਖਿਆ ਨਹੀਂ ਕਰਦਾ, ਰਿਪੋਰਟ ਨੂੰ ਸੱਚਾ ਨਹੀਂ ਬਣਾਉਂਦਾ, ਅਤੇ ਇਹ ਸਥਾਪਿਤ ਨਹੀਂ ਕਰਦਾ ਕਿ ਗੇਟਵੇ ਪ੍ਰਸ਼ਾਸਕ ਇਸ ਅਮਲ ਨੂੰ ਡਿਵਾਈਸ ਨੀਤੀ ਦੀ ਪੂਰਤੀ ਵਜੋਂ ਸਵੀਕਾਰ ਕਰਦਾ ਹੈ।
ਕਦਮ 4: ਬਦਲਾਅ ਨੂੰ ਉਲਟਣਯੋਗ ਰੱਖੋ
ਸੰਪਾਦਨ ਤੋਂ ਪਹਿਲਾਂ ਪਰੋਫਾਈਲ ਦਾ ਬੈਕਅੱਪ ਲਓ, ਅਤੇ ਰੈਪਰ ਨੂੰ ਸੰਸਕਰਣ ਨਿਯੰਤਰਣ ਅਧੀਨ ਰੱਖੋ ਤਾਂ ਜੋ ਰੋਲਬੈਕ ਕਾਪੀ ਲੱਭਣ ਦੀ ਜਗ੍ਹਾ ਜਾਣਿਆ ਹੈਸ਼ ਬਹਾਲ ਕਰੇ। ਸਕ੍ਰਿਪਟ ਦਾ ਰਾਹ, ਹੈਸ਼, ਨਿਸ਼ਪਾਦਨ ਉਪਭੋਗਤਾ ਅਤੇ ਮਨਜ਼ੂਰੀ ਦੇਣ ਵਾਲਾ ਇੱਕ ਥਾਂ ਲਿਖੋ।
ਉਲਟਣ ਲਈ ਵਿਕਲਪ ਹਟਾਓ, ਕਲਾਇੰਟ ਮੁੜ ਸ਼ੁਰੂ ਕਰੋ ਅਤੇ ਪੁਸ਼ਟੀ ਕਰੋ ਕਿ ਮੂਲ ਗਲਤੀ ਵਾਪਸ ਆਈ ਹੈ। ਜੇ ਰੋਲਬੈਕ ਤੋਂ ਬਾਅਦ ਵੀ ਗੇਟਵੇ ਲੌਗਇਨ ਨੂੰ ਰੱਦ ਕਰਦਾ ਹੈ, ਤਾਂ ਕੁਝ ਹੋਰ ਵੀ ਬਦਲਿਆ ਹੈ, ਅਤੇ ਉਹ ਫ਼ਰਕ ਲੱਭਣਾ ਰੈਪਰ ਦੁਬਾਰਾ ਅਜਮਾਉਣ ਤੋਂ ਪਹਿਲਾਂ ਆਉਂਦਾ ਹੈ। ਬਦਲਾਅ ਵਿੰਡੋ ਦੌਰਾਨ ਪਿਛਲੀ ਕਾਪੀ ਰੱਖੋ, ਜਿਸਦਾ ਬਹੁਤੀਆਂ ਟੀਮਾਂ ਲਈ ਅਰਥ ਹੈ ਅਗਲੀ ਰੱਖ-ਰਖਾਅ ਵਿੰਡੋ ਲੰਘਣ ਤੱਕ।
ਸਫਲ ਤੈਨਾਤੀ ਤੋਂ ਬਾਅਦ ਇੱਕ ਨਹੀਂ, ਦੋ ਚੀਜ਼ਾਂ ਜਾਂਚੋ: ਸੁਰੰਗ ਉੱਪਰ ਆਉਂਦੀ ਹੈ, ਅਤੇ ਜਿਸ ਡਿਵਾਈਸ ਨੂੰ ਪੋਸਚਰ ਜਾਂਚ ਵਿੱਚ ਅਸਫਲ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ ਉਹ ਅਜੇ ਵੀ ਰੱਦ ਹੁੰਦਾ ਹੈ। ਹਰ ਕਿਸੇ ਲਈ ਕੰਮ ਕਰਨ ਵਾਲਾ ਕਨੈਕਸ਼ਨ ਇਸ ਗੱਲ ਦਾ ਸਬੂਤ ਨਹੀਂ ਕਿ ਮੁਲਾਂਕਣ ਤੁਹਾਡੇ ਬਦਲਾਅ ਤੋਂ ਬਚ ਗਿਆ।
ਦੂਜੀ ਸਮੱਸਿਆ ਪੈਦਾ ਕਰਨ ਵਾਲੇ ਸ਼ਾਰਟਕਟ
ਲੋੜੀਂਦੀਆਂ ਜਾਂਚਾਂ ਚਲਾਏ ਬਿਨਾਂ ਸਹਾਇਕ ਨੂੰ ਅਨੁਕੂਲ ਸਥਿਤੀ ਦੀ ਰਿਪੋਰਟ ਕਰਨ ਦਿਓ ਨਾ, ਅਤੇ ਕਿਸੇ ਹੋਰ ਓਪਰੇਟਿੰਗ ਸਿਸਟਮ ਨਾਲ ਮੇਲ ਖਾਣ ਲਈ ਪਲੇਟਫਾਰਮ ਪਛਾਣ ਨੂੰ ਓਵਰਰਾਈਡ ਨਾ ਕਰੋ। ਵੱਖਰੇ ਪਲੇਟਫਾਰਮ ਦਾ ਦਾਅਵਾ ਇਸ ਗੱਲ ਦਾ ਸਬੂਤ ਨਹੀਂ ਕਿ ਅਸਲ ਡਿਵਾਈਸ ਨੀਤੀ ਪੂਰੀ ਕਰਦਾ ਹੈ। ਇਹ ਤੁਹਾਨੂੰ ਅਜਿਹੇ ਕਲਾਇੰਟ ਨਾਲ ਛੱਡਦਾ ਹੈ ਜੋ ਹਰ ਭਵਿੱਖੀ ਲੌਗਇਨ ’ਤੇ ਝੂਠ ਬੋਲਦਾ ਹੈ।
ਸਰਵਰ ਪ੍ਰਮਾਣਿਕਤਾ ਬੰਦ ਕਰਨਾ, ਪੁਰਾਣੀ ਕੂਕੀ ਮੁੜ ਚਲਾਉਣਾ ਅਤੇ ਬਿਨਾਂ ਸਮੀਖਿਆ ਵਾਲੀਆਂ ਸਕ੍ਰਿਪਟਾਂ ਦਾ ਢੇਰ ਲਾਉਣਾ — ਇਹ ਸਭ ਦਿਖਣ ਵਾਲੀ ਅਸਫਲਤਾ ਨੂੰ ਨਾ ਦਿਖਣ ਵਾਲੀ ਨਾਲ ਬਦਲਦੇ ਹਨ। ਜੇ ਸਥਾਪਿਤ ਕਲਾਇੰਟ ਸਮਰਥਿਤ ਫਲੋ ਪੂਰਾ ਨਹੀਂ ਕਰ ਸਕਦਾ, ਤਾਂ ਆਪਣੇ ਕੋਲ ਮੌਜੂਦ ਫਲੋ ਨੂੰ ਮੋੜਨ ਦੀ ਬਜਾਏ ਮਨਜ਼ੂਰ ਵਿਕਲਪ ਮੰਗੋ।
OpenConnect ਮੈਨੂਅਲ --csd-wrapper ਅਤੇ --csd-user ਨੂੰ ਵੱਖਰੇ ਤੌਰ ’ਤੇ ਦਸਤਾਵੇਜ਼ ਕਰਦਾ ਹੈ, ਅਤੇ ਇਹੀ ਮਹੱਤਵਪੂਰਨ ਸੰਕੇਤ ਹੈ: ਸਕ੍ਰਿਪਟ ਅਤੇ ਪਛਾਣ ਦੋ ਫੈਸਲੇ ਹਨ। ਇਹਨਾਂ ਦੀ ਵੱਖਰੇ ਤੌਰ ’ਤੇ ਸਮੀਖਿਆ ਕਰੋ ਅਤੇ ਦੋਵੇਂ ਲਿਖੋ। ਫਿਰ ਲੌਗਇਨ ਪ੍ਰੌਂਪਟ ਕੋਡ ਪੇਸਟ ਕਰਕੇ ਹੱਲ ਕਰਨ ਵਾਲੀ ਬੁਝਾਰਤ ਨਹੀਂ ਰਹਿੰਦੀ।