cmsCli_authenticate: 2c68: 3c1c0003 lui gp,0x3 // ... 2c6c: 279c3c68 addiu gp,gp,15464 // gp = 0x33c68 2c70: 0399e021 addu gp,gp,t9 // gp += &cmsCli_authenticate (gp = 0x368d0 = GOT) 2c74: 27bdfdc0 addiu sp,sp,-576 // 576 bytes of stack 2c78: afbf023c sw ra,572(sp) // save ra 2c7c: afbe0238 sw s8,568(sp) // save s8 2c80: 03a0f021 move s8,sp // s8 = sp (frame pointer?) 2c84: afbc0018 sw gp,24(sp) // .24 = GOT 2c88: afc40240 sw a0,576(s8) // .576 = arg1 2c8c: afc50244 sw a1,580(s8) // .580 = arg2/timeout 2c90: afc0002c sw zero,44(s8) // .44 = 0 2c94: afc00028 sw zero,40(s8) // .40 = 0 2c98: afc00024 sw zero,36(s8) // .36 = 0 2c9c: afc00020 sw zero,32(s8) // .32 = 0 2ca0: 8f838204 lw v1,-32252(gp) // v1 = &exitOnIdleTimeout 2ca4: 8fc20244 lw v0,580(s8) // v0 = arg2/timeout 2ca8: ac620000 sw v0,0(v1) // exitOnIdleTimeout = arg2/timeout 2cac: 8fc30240 lw v1,576(s8) // v1 = arg1 2cb0: 24020003 li v0,3 // v0 = 3 2cb4: 146200a7 bne v1,v0,0x2f54 // if (arg1 != 3) goto mainloop 2cb8: 00000000 nop 2cbc: 27c20030 addiu v0,s8,48 // v0 = &.48 2cc0: 00402021 move a0,v0 // a0 = &.48 2cc4: 24050100 li a1,256 // a1 = 256 2cc8: 8f998134 lw t9,-32460(gp) // ... 2ccc: 0320f809 jalr t9 // v0 = cli_readString(&.48, 256) // .48 = username_in? 2cd0: 00000000 nop 2cd4: 8fdc0018 lw gp,24(s8) // gp = GOT 2cd8: afc20020 sw v0,32(s8) // .32 = cli_readString result 2cdc: 8fc20020 lw v0,32(s8) 2ce0: 1040009c beqz v0,0x2f54 // if (cli_readString(...) == 0) goto mainloop 2ce4: 00000000 nop 2ce8: 8fc20020 lw v0,32(s8) // v0 = cli_readString result 2cec: afc20230 sw v0,560(s8) // .560 = cli_readString result 2cf0: 100000b0 b 0x2fb4 // goto ret560 2cf4: 00000000 nop mainbody: 2cf8: a3c00030 sb zero,48(s8) // .48b = 0 2cfc: a3c00130 sb zero,304(s8) // .304b = 0 2d00: 8f828024 lw v0,-32732(gp) 2d04: 24448f4c addiu a0,v0,-28852 // a0 = "Login: " 2d08: 8f998320 lw t9,-31968(gp) // ... 2d0c: 0320f809 jalr t9 // v0 = printf("Login: ") 2d10: 00000000 nop 2d14: 8fdc0018 lw gp,24(s8) // gp = GOT 2d18: 8f82831c lw v0,-31972(gp) // v0 = &stdout 2d1c: 8c420000 lw v0,0(v0) // v0 = stdout 2d20: 00402021 move a0,v0 // a0 = stdout 2d24: 8f998278 lw t9,-32136(gp) // ... 2d28: 0320f809 jalr t9 // v0 = fflush(stdout) 2d2c: 00000000 nop 2d30: 8fdc0018 lw gp,24(s8) // gp = GOT 2d34: 27c20030 addiu v0,s8,48 // v0 = &.48 2d38: 00402021 move a0,v0 // a0 = &.48 2d3c: 24050100 li a1,256 // a1 = 256 2d40: 8f998134 lw t9,-32460(gp) // ... 2d44: 0320f809 jalr t9 // v0 = cli_readString(&.48, 256) // .48 = username_in 2d48: 00000000 nop 2d4c: 8fdc0018 lw gp,24(s8) // gp = GOT 2d50: afc20020 sw v0,32(s8) // .32 = cli_readString result 2d54: 8fc20020 lw v0,32(s8) 2d58: 14400081 bnez v0,0x2f60 // if (cli_readString(...) != 0) goto mainloopdone 2d5c: 00000000 nop 2d60: 8f828024 lw v0,-32732(gp) // ... 2d64: 24448f54 addiu a0,v0,-28844 // a0 = "Password: " 2d68: 8f9982a8 lw t9,-32088(gp) // ... 2d6c: 0320f809 jalr t9 // v0 = getpass("Password: ") 2d70: 00000000 nop 2d74: 8fdc0018 lw gp,24(s8) // gp = GOT 2d78: afc2002c sw v0,44(s8) // .44 = passwd_in 2d7c: 8fc2002c lw v0,44(s8) // v0 = passwd_in 2d80: 10400014 beqz v0,0x2dd4 // if (!passwd_in) goto skip_passwd_copy 2d84: 00000000 nop 2d88: 27c20130 addiu v0,s8,304 // v0 = &.304 2d8c: 00402021 move a0,v0 // a0 = &.304 2d90: 8fc5002c lw a1,44(s8) // a1 = passwd_in 2d94: 8f998340 lw t9,-31936(gp) // ... 2d98: 0320f809 jalr t9 // v0 = strcpy(&.304, passwd_in) 2d9c: 00000000 nop 2da0: 8fdc0018 lw gp,24(s8) // gp = GOT 2da4: 8fc4002c lw a0,44(s8) // a0 = passwd_in 2da8: 8f99807c lw t9,-32644(gp) // ... 2dac: 0320f809 jalr t9 // v0 = strlen(passwd_in) 2db0: 00000000 nop 2db4: 8fdc0018 lw gp,24(s8) // gp = GOT 2db8: 8fc4002c lw a0,44(s8) // a0 = passwd_in 2dbc: 00002821 move a1,zero // a1 = 0 2dc0: 00403021 move a2,v0 // a2 = strlen(passwd_in) 2dc4: 8f99815c lw t9,-32420(gp) // ... 2dc8: 0320f809 jalr t9 // v0 = memset(passwd_in, 0, strlen(passwd_in)) 2dcc: 00000000 nop 2dd0: 8fdc0018 lw gp,24(s8) // gp = GOT skip_passwd_copy: 2dd4: 8fc20024 lw v0,36(s8) // ... 2dd8: 24420001 addiu v0,v0,1 // ... 2ddc: afc20024 sw v0,36(s8) // .36++ // attempt count? 2de0: 27c20030 addiu v0,s8,48 2de4: 00402021 move a0,v0 // a0 = username_in 2de8: 8f828024 lw v0,-32732(gp) 2dec: 24458f60 addiu a1,v0,-28832 // a1 = "root" 2df0: 8f998254 lw t9,-32172(gp) // 2df4: 0320f809 jalr t9 // v0 = cmsUtl_strcmp(username_in, "root") 2df8: 00000000 nop 2dfc: 8fdc0018 lw gp,24(s8) // gp = GOT 2e00: 14400012 bnez v0,0x2e4c // if (cmsUtl_strcmp(username_in, "root") != 0) goto notroot 2e04: 00000000 nop 2e08: 27c20130 addiu v0,s8,304 2e0c: 00402021 move a0,v0 // a0 = passwd_in 2e10: 8f828024 lw v0,-32732(gp) 2e14: 24458f68 addiu a1,v0,-28824 // a1 = "public" 2e18: 8f998254 lw t9,-32172(gp) 2e1c: 0320f809 jalr t9 // v0 = cmsUtl_strcmp(passwd_in, "public") 2e20: 00000000 nop 2e24: 8fdc0018 lw gp,24(s8) 2e28: 14400008 bnez v0,0x2e4c // if (cmsUtl_strcmp(passwd_in, "public") != 0) goto notroot 2e2c: 00000000 nop // here if root:public 2e30: 24020001 li v0,1 // 2e34: afc20028 sw v0,40(s8) // .40 = 1 2e38: 8f838170 lw v1,-32400(gp) // v1 = &currPerm 2e3c: 2402ff80 li v0,-128 2e40: a0620000 sb v0,0(v1) // currPerm = 0x80 2e44: 10000043 b 0x2f54 // goto mainloop 2e48: 00000000 nop notroot: 2e4c: 27c20030 addiu v0,s8,48 2e50: 00402021 move a0,v0 // a0 = username_in 2e54: 8f828024 lw v0,-32732(gp) 2e58: 24458f70 addiu a1,v0,-28816 // a1 = "ztedebug" 2e5c: 8f998254 lw t9,-32172(gp) 2e60: 0320f809 jalr t9 // v0 = cmsUtl_strcmp(username_in, "ztedebug") 2e64: 00000000 nop 2e68: 8fdc0018 lw gp,24(s8) 2e6c: 14400012 bnez v0,0x2eb8 // if (cmsUtl_strcmp(username_in, "ztedebug") != 0) goto notdebug 2e70: 00000000 nop 2e74: 27c20130 addiu v0,s8,304 2e78: 00402021 move a0,v0 // a0 = passwd_in 2e7c: 8f828024 lw v0,-32732(gp) 2e80: 24458f70 addiu a1,v0,-28816 // a1 = "ztedebug" 2e84: 8f998254 lw t9,-32172(gp) 2e88: 0320f809 jalr t9 2e8c: 00000000 nop 2e90: 8fdc0018 lw gp,24(s8) 2e94: 14400008 bnez v0,0x2eb8 // if (cmsUtl_strcmp(passwd_in, "ztedebug") != 0) goto notdebug 2e98: 00000000 nop 2e9c: 24020001 li v0,1 2ea0: afc20028 sw v0,40(s8) // .40 = 1 2ea4: 8f838170 lw v1,-32400(gp) 2ea8: 2402ff80 li v0,-128 2eac: a0620000 sb v0,0(v1) 2eb0: 10000028 b 0x2f54 2eb4: 00000000 nop 2eb8: 8fc20024 lw v0,36(s8) notdebug: 2ebc: 28420003 slti v0,v0,3 // v0 = .36 < 3 2ec0: 14400017 bnez v0,0x2f20 // if (.36 >= 3) goto moretries 2ec4: 00000000 nop 2ec8: 8f828024 lw v0,-32732(gp) 2ecc: 24448f7c addiu a0,v0,-28804 // a0 = "Authorization failed after trying %d times!!!" 2ed0: 8fc50024 lw a1,36(s8) 2ed4: 8f998320 lw t9,-31968(gp) 2ed8: 0320f809 jalr t9 2edc: 00000000 nop 2ee0: 8fdc0018 lw gp,24(s8) 2ee4: 8f82831c lw v0,-31972(gp) 2ee8: 8c420000 lw v0,0(v0) 2eec: 00402021 move a0,v0 2ef0: 8f998278 lw t9,-32136(gp) 2ef4: 0320f809 jalr t9 2ef8: 00000000 nop 2efc: 8fdc0018 lw gp,24(s8) 2f00: 24040003 li a0,3 2f04: 8f998298 lw t9,-32104(gp) 2f08: 0320f809 jalr t9 2f0c: 00000000 nop 2f10: 8fdc0018 lw gp,24(s8) 2f14: afc00024 sw zero,36(s8) 2f18: 1000000e b 0x2f54 2f1c: 00000000 nop moretries: 2f20: 8f828024 lw v0,-32732(gp) 2f24: 24448fac addiu a0,v0,-28756 // a0 = "Login incorrect. Try again." 2f28: 8f9982b0 lw t9,-32080(gp) 2f2c: 0320f809 jalr t9 2f30: 00000000 nop 2f34: 8fdc0018 lw gp,24(s8) 2f38: 8f82831c lw v0,-31972(gp) 2f3c: 8c420000 lw v0,0(v0) 2f40: 00402021 move a0,v0 2f44: 8f998278 lw t9,-32136(gp) 2f48: 0320f809 jalr t9 2f4c: 00000000 nop 2f50: 8fdc0018 lw gp,24(s8) mainloop: 2f54: 8fc20028 lw v0,40(s8) // v0 = .40 2f58: 1040ff67 beqz v0,0x2cf8 // if (.40 == 0) goto mainbody 2f5c: 00000000 nop mainloopdone: 2f60: 8fc20020 lw v0,32(s8) // v0 = .32 (cli_readString result, first run) 2f64: 14400011 bnez v0,0x2fac // if (.32 != 0) goto ret32 2f68: 00000000 nop 2f6c: 8f828170 lw v0,-32400(gp) // v0 = &currPerm 2f70: 90420000 lbu v0,0(v0) // v0 = currPerm 2f74: 00401821 move v1,v0 // v1 = currPerm 2f78: 8f82809c lw v0,-32612(gp) // v0 = currUser 2f7c: afa20010 sw v0,16(sp) // .16 = currUser 2f80: afa30014 sw v1,20(sp) // .20 = currPerm 2f84: 24040007 li a0,7 // a0 = 7 2f88: 8f828024 lw v0,-32732(gp) // ... 2f8c: 24458f38 addiu a1,v0,-28872 // a1 = "cmsCli_authenticate" 2f90: 240600bb li a2,187 // a2 = 187 2f94: 8f828024 lw v0,-32732(gp) // ... 2f98: 24478fc8 addiu a3,v0,-28728 // a3 = "current logged in user %s perm=0x%x" 2f9c: 8f998224 lw t9,-32220(gp) // ... 2fa0: 0320f809 jalr t9 // log_log(7, "cmsCli_authenticate", 187, "current logged in user %s perm=0x%x", currUser, currPerm) 2fa4: 00000000 nop 2fa8: 8fdc0018 lw gp,24(s8) ret32: 2fac: 8fc20020 lw v0,32(s8) 2fb0: afc20230 sw v0,560(s8) // .560 = .32; fallthru ret560 ret560: 2fb4: 8fc20230 lw v0,560(s8) // v0 = .560 2fb8: 03c0e821 move sp,s8 // restore sp 2fbc: 8fbf023c lw ra,572(sp) // restore ra 2fc0: 8fbe0238 lw s8,568(sp) // restore s8 2fc4: 27bd0240 addiu sp,sp,576 // dealloc stack 2fc8: 03e00008 jr ra // return v0 2fcc: 00000000 nop