#include <stdio.h>
#include <string.h>
#include <ctype.h>
int
password_validate(const char *pass)
{
int upper = 0, lower = 0, digit = 0;
if (pass
== NULL
|| strlen(pass
) == 0) return -1;
printf("checking password: "); do
{
upper = 1;
lower = 1;
digit = 1;
} while ((!lower || !upper || !digit) && *(++pass));
return (*pass != '\0' ? 0 : (upper == 0 ? -2 : (lower == 0 ? -3 : -4)));
}
int main(void) {
int err;
const char *pass = "Password";
err = password_validate(pass);
pass = "Pass678word";
err = password_validate(pass);
pass = "password1";
err = password_validate(pass);
pass = "1password";
err = password_validate(pass);
pass = "Password1";
err = password_validate(pass);
pass = "password1D";
err = password_validate(pass);
pass = "pAssword1";
err = password_validate(pass);
pass = "1Password";
err = password_validate(pass);
pass = "aA1";
err = password_validate(pass);
// expected to check "a" and return -2 due to no uppercase.
// ends up checking "aa" and returns 0.
pass = "aa";
err = password_validate(pass);
// expected to only check "hi1" and return -2
// ends up checking "hi1N" and returns 0.
pass = "hi1NOTINCLUDED";
err = password_validate(pass);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KI2luY2x1ZGUgPGN0eXBlLmg+CgppbnQKcGFzc3dvcmRfdmFsaWRhdGUoY29uc3QgY2hhciAqcGFzcykKewogICAgaW50IHVwcGVyID0gMCwgbG93ZXIgPSAwLCBkaWdpdCA9IDA7CiAgICBpZiAocGFzcyA9PSBOVUxMIHx8IHN0cmxlbihwYXNzKSA9PSAwKQogICAgICAgIHJldHVybiAtMTsKCiAgICBwcmludGYoImNoZWNraW5nIHBhc3N3b3JkOiAiKTsKICAgIGRvCiAgICB7CiAgICAJcHJpbnRmKCIlYyIsICpwYXNzKTsKICAgICAgICBpZiAoaXN1cHBlcigqcGFzcykpCiAgICAgICAgICAgIHVwcGVyID0gMTsKICAgICAgICBpZiAoaXNsb3dlcigqcGFzcykpCiAgICAgICAgICAgIGxvd2VyID0gMTsKICAgICAgICBpZiAoaXNkaWdpdCgqcGFzcykpCiAgICAgICAgICAgIGRpZ2l0ID0gMTsKICAgIH0gd2hpbGUgKCghbG93ZXIgfHwgIXVwcGVyIHx8ICFkaWdpdCkgJiYgKigrK3Bhc3MpKTsKICAgIHByaW50ZigiXG4iKTsKICAgIHJldHVybiAoKnBhc3MgIT0gJ1wwJyA/IDAgOiAodXBwZXIgPT0gMCA/IC0yIDogKGxvd2VyID09IDAgPyAtMyA6IC00KSkpOwp9CgppbnQgbWFpbih2b2lkKSB7CglpbnQgZXJyOwoJY29uc3QgY2hhciAqcGFzcyA9ICJQYXNzd29yZCI7CgllcnIgPSBwYXNzd29yZF92YWxpZGF0ZShwYXNzKTsKCXByaW50ZigiWzFdWyVkXVxuIiwgZXJyKTsKCQoJcGFzcyA9ICJQYXNzNjc4d29yZCI7CgllcnIgPSBwYXNzd29yZF92YWxpZGF0ZShwYXNzKTsKCXByaW50ZigiWzJdWyVkXVxuIiwgZXJyKTsKCQoJcGFzcyA9ICJwYXNzd29yZDEiOwoJZXJyID0gcGFzc3dvcmRfdmFsaWRhdGUocGFzcyk7CglwcmludGYoIlszXVslZF1cbiIsIGVycik7CgkKCXBhc3MgPSAiMXBhc3N3b3JkIjsKCWVyciA9IHBhc3N3b3JkX3ZhbGlkYXRlKHBhc3MpOwoJcHJpbnRmKCJbNF1bJWRdXG4iLCBlcnIpOwoKICAgIHBhc3MgPSAiUGFzc3dvcmQxIjsKCWVyciA9IHBhc3N3b3JkX3ZhbGlkYXRlKHBhc3MpOwoJcHJpbnRmKCJbNV1bJWRdXG4iLCBlcnIpOwoJCglwYXNzID0gInBhc3N3b3JkMUQiOwoJZXJyID0gcGFzc3dvcmRfdmFsaWRhdGUocGFzcyk7CglwcmludGYoIls2XVslZF1cbiIsIGVycik7CgkKCXBhc3MgPSAicEFzc3dvcmQxIjsKCWVyciA9IHBhc3N3b3JkX3ZhbGlkYXRlKHBhc3MpOwoJcHJpbnRmKCJbN11bJWRdXG4iLCBlcnIpOwoJCglwYXNzID0gIjFQYXNzd29yZCI7CgllcnIgPSBwYXNzd29yZF92YWxpZGF0ZShwYXNzKTsKCXByaW50ZigiWzhdWyVkXVxuIiwgZXJyKTsKCglwYXNzID0gImFBMSI7CgllcnIgPSBwYXNzd29yZF92YWxpZGF0ZShwYXNzKTsKCXByaW50ZigiWzldWyVkXVxuIiwgZXJyKTsKCQoJLy8gZXhwZWN0ZWQgdG8gY2hlY2sgImEiIGFuZCByZXR1cm4gLTIgZHVlIHRvIG5vIHVwcGVyY2FzZS4KCS8vIGVuZHMgdXAgY2hlY2tpbmcgImFhIiBhbmQgcmV0dXJucyAwLgoJcGFzcyA9ICJhYSI7CgllcnIgPSBwYXNzd29yZF92YWxpZGF0ZShwYXNzKTsKCXByaW50ZigiWzEwXVslZF1cbiIsIGVycik7IAoJCgkvLyBleHBlY3RlZCB0byBvbmx5IGNoZWNrICJoaTEiIGFuZCByZXR1cm4gLTIKCS8vIGVuZHMgdXAgY2hlY2tpbmcgImhpMU4iIGFuZCByZXR1cm5zIDAuCglwYXNzID0gImhpMU5PVElOQ0xVREVEIjsKCWVyciA9IHBhc3N3b3JkX3ZhbGlkYXRlKHBhc3MpOwoJcHJpbnRmKCJbMTFdWyVkXVxuIiwgZXJyKTsKCglyZXR1cm4gMDsKfQo=