Lines Matching refs:ctx

110 rpc_cleanup_smbctx(struct smb_ctx *ctx)  in rpc_cleanup_smbctx()  argument
113 (*close_hook)(ctx); in rpc_cleanup_smbctx()
186 dump_ctx(char *where, struct smb_ctx *ctx) in dump_ctx() argument
189 dump_ctx_flags(ctx->ct_flags); in dump_ctx()
191 if (ctx->ct_locname) in dump_ctx()
192 printf(" localname=\"%s\"", ctx->ct_locname); in dump_ctx()
196 if (ctx->ct_fullserver) in dump_ctx()
197 printf(" fullserver=\"%s\"", ctx->ct_fullserver); in dump_ctx()
201 if (ctx->ct_srvaddr_s) in dump_ctx()
202 printf(" srvaddr_s=\"%s\"\n", ctx->ct_srvaddr_s); in dump_ctx()
206 if (ctx->ct_addrinfo) in dump_ctx()
207 dump_addrinfo(ctx->ct_addrinfo); in dump_ctx()
211 dump_iod_ssn(&ctx->ct_iod_ssn); in dump_ctx()
214 ctx->ct_origshare ? ctx->ct_origshare : "", in dump_ctx()
215 ctx->ct_shtype_req); in dump_ctx()
217 printf(" ct_home=\"%s\"\n", ctx->ct_home); in dump_ctx()
218 printf(" ct_rpath=\"%s\"\n", ctx->ct_rpath); in dump_ctx()
224 smb_ctx_t *ctx; in smb_ctx_alloc() local
227 ctx = malloc(sizeof (*ctx)); in smb_ctx_alloc()
228 if (ctx == NULL) in smb_ctx_alloc()
230 err = smb_ctx_init(ctx); in smb_ctx_alloc()
232 free(ctx); in smb_ctx_alloc()
235 *ctx_pp = ctx; in smb_ctx_alloc()
243 smb_ctx_init(struct smb_ctx *ctx) in smb_ctx_init() argument
247 bzero(ctx, sizeof (*ctx)); in smb_ctx_init()
249 error = nb_ctx_create(&ctx->ct_nb); in smb_ctx_init()
253 ctx->ct_dev_fd = -1; in smb_ctx_init()
254 ctx->ct_door_fd = -1; in smb_ctx_init()
255 ctx->ct_parsedlevel = SMBL_NONE; in smb_ctx_init()
256 ctx->ct_minlevel = SMBL_NONE; in smb_ctx_init()
257 ctx->ct_maxlevel = SMBL_PATH; in smb_ctx_init()
260 ctx->ct_vopt = SMBVOPT_SIGNING_ENABLED; in smb_ctx_init()
261 ctx->ct_owner = SMBM_ANY_OWNER; in smb_ctx_init()
262 ctx->ct_authflags = SMB_AT_DEFAULT; in smb_ctx_init()
263 ctx->ct_minauth = SMB_AT_MINAUTH; in smb_ctx_init()
264 ctx->ct_maxver = SMB2_DIALECT_MAX; in smb_ctx_init()
269 strlcpy(ctx->ct_domain, default_domain, in smb_ctx_init()
270 sizeof (ctx->ct_domain)); in smb_ctx_init()
271 strlcpy(ctx->ct_user, default_user, in smb_ctx_init()
272 sizeof (ctx->ct_user)); in smb_ctx_init()
313 smb_ctx_scan_argv(struct smb_ctx *ctx, int argc, char **argv, in smb_ctx_scan_argv() argument
327 ctx->ct_minlevel = minlevel; in smb_ctx_scan_argv()
328 ctx->ct_maxlevel = maxlevel; in smb_ctx_scan_argv()
329 ctx->ct_shtype_req = sharetype; in smb_ctx_scan_argv()
347 error = smb_ctx_setuser(ctx, "", TRUE); in smb_ctx_scan_argv()
348 ctx->ct_flags |= SMBCF_NOPWD; in smb_ctx_scan_argv()
352 error = smb_ctx_setuser(ctx, arg, TRUE); in smb_ctx_scan_argv()
380 error = smb_ctx_parseunc(ctx, arg, in smb_ctx_scan_argv()
391 smb_ctx_free(smb_ctx_t *ctx) in smb_ctx_free() argument
393 smb_ctx_done(ctx); in smb_ctx_free()
394 free(ctx); in smb_ctx_free()
398 smb_ctx_done(struct smb_ctx *ctx) in smb_ctx_done() argument
401 rpc_cleanup_smbctx(ctx); in smb_ctx_done()
403 if (ctx->ct_dev_fd != -1) { in smb_ctx_done()
404 nsmb_close(ctx->ct_dev_fd); in smb_ctx_done()
405 ctx->ct_dev_fd = -1; in smb_ctx_done()
407 if (ctx->ct_door_fd != -1) { in smb_ctx_done()
408 close(ctx->ct_door_fd); in smb_ctx_done()
409 ctx->ct_door_fd = -1; in smb_ctx_done()
411 if (ctx->ct_srvaddr_s) { in smb_ctx_done()
412 free(ctx->ct_srvaddr_s); in smb_ctx_done()
413 ctx->ct_srvaddr_s = NULL; in smb_ctx_done()
415 if (ctx->ct_nb) { in smb_ctx_done()
416 nb_ctx_done(ctx->ct_nb); in smb_ctx_done()
417 ctx->ct_nb = NULL; in smb_ctx_done()
419 if (ctx->ct_locname) { in smb_ctx_done()
420 free(ctx->ct_locname); in smb_ctx_done()
421 ctx->ct_locname = NULL; in smb_ctx_done()
423 if (ctx->ct_origshare) { in smb_ctx_done()
424 free(ctx->ct_origshare); in smb_ctx_done()
425 ctx->ct_origshare = NULL; in smb_ctx_done()
427 if (ctx->ct_fullserver) { in smb_ctx_done()
428 free(ctx->ct_fullserver); in smb_ctx_done()
429 ctx->ct_fullserver = NULL; in smb_ctx_done()
431 if (ctx->ct_addrinfo) { in smb_ctx_done()
432 freeaddrinfo(ctx->ct_addrinfo); in smb_ctx_done()
433 ctx->ct_addrinfo = NULL; in smb_ctx_done()
435 if (ctx->ct_home) { in smb_ctx_done()
436 free(ctx->ct_home); in smb_ctx_done()
437 ctx->ct_home = NULL; in smb_ctx_done()
439 if (ctx->ct_rpath) { in smb_ctx_done()
440 free(ctx->ct_rpath); in smb_ctx_done()
441 ctx->ct_rpath = NULL; in smb_ctx_done()
443 if (ctx->ct_ssnkey_buf) { in smb_ctx_done()
444 free(ctx->ct_ssnkey_buf); in smb_ctx_done()
445 ctx->ct_ssnkey_buf = NULL; in smb_ctx_done()
456 smb_ctx_parseunc(struct smb_ctx *ctx, const char *unc, in smb_ctx_parseunc() argument
469 ctx->ct_minlevel = minlevel; in smb_ctx_parseunc()
470 ctx->ct_maxlevel = maxlevel; in smb_ctx_parseunc()
471 ctx->ct_shtype_req = sharetype; in smb_ctx_parseunc()
472 ctx->ct_parsedlevel = SMBL_NONE; in smb_ctx_parseunc()
525 error = smb_ctx_setfullserver(ctx, host); in smb_ctx_parseunc()
528 ctx->ct_parsedlevel = SMBL_VC; in smb_ctx_parseunc()
531 error = smb_ctx_setdomain(ctx, dom, TRUE); in smb_ctx_parseunc()
542 if (ctx->ct_maxlevel < SMBL_VC) { in smb_ctx_parseunc()
548 error = smb_ctx_setuser(ctx, usr, TRUE); in smb_ctx_parseunc()
553 error = smb_ctx_setpassword(ctx, pw, TRUE); in smb_ctx_parseunc()
575 if (ctx->ct_maxlevel < SMBL_SHARE) { in smb_ctx_parseunc()
591 error = smb_ctx_setshare(ctx, p, sharetype); in smb_ctx_parseunc()
594 ctx->ct_parsedlevel = SMBL_SHARE; in smb_ctx_parseunc()
601 free(ctx->ct_rpath); in smb_ctx_parseunc()
602 ctx->ct_rpath = strdup(path); in smb_ctx_parseunc()
604 } else if (ctx->ct_minlevel >= SMBL_SHARE) { in smb_ctx_parseunc()
615 dump_ctx("after smb_ctx_parseunc", ctx); in smb_ctx_parseunc()
622 smb_ctx_setcharset(struct smb_ctx *ctx, const char *arg) in smb_ctx_setcharset() argument
625 int cslen = sizeof (ctx->ct_ssn.ioc_localcs); in smb_ctx_setcharset()
641 localcs = memcpy(ctx->ct_ssn.ioc_localcs, arg, lcslen); in smb_ctx_setcharset()
643 servercs = strcpy(ctx->ct_ssn.ioc_servercs, cp); in smb_ctx_setcharset()
657 smb_ctx_setauthflags(struct smb_ctx *ctx, int flags) in smb_ctx_setauthflags() argument
659 ctx->ct_authflags = flags; in smb_ctx_setauthflags()
664 smb_ctx_setfullserver(struct smb_ctx *ctx, const char *name) in smb_ctx_setfullserver() argument
670 if (ctx->ct_fullserver) in smb_ctx_setfullserver()
671 free(ctx->ct_fullserver); in smb_ctx_setfullserver()
672 ctx->ct_fullserver = p; in smb_ctx_setfullserver()
677 smb_ctx_setserver(struct smb_ctx *ctx, const char *name) in smb_ctx_setserver() argument
679 strlcpy(ctx->ct_srvname, name, in smb_ctx_setserver()
680 sizeof (ctx->ct_srvname)); in smb_ctx_setserver()
685 smb_ctx_setuser(struct smb_ctx *ctx, const char *name, int from_cmd) in smb_ctx_setuser() argument
688 if (strlen(name) >= sizeof (ctx->ct_user)) { in smb_ctx_setuser()
698 if (!from_cmd && (ctx->ct_flags & SMBCF_CMD_USR)) in smb_ctx_setuser()
701 strlcpy(ctx->ct_user, name, in smb_ctx_setuser()
702 sizeof (ctx->ct_user)); in smb_ctx_setuser()
706 ctx->ct_flags |= SMBCF_CMD_USR; in smb_ctx_setuser()
717 smb_ctx_setdomain(struct smb_ctx *ctx, const char *name, int from_cmd) in smb_ctx_setdomain() argument
720 if (strlen(name) >= sizeof (ctx->ct_domain)) { in smb_ctx_setdomain()
730 if (!from_cmd && (ctx->ct_flags & SMBCF_CMD_DOM)) in smb_ctx_setdomain()
733 strlcpy(ctx->ct_domain, name, in smb_ctx_setdomain()
734 sizeof (ctx->ct_domain)); in smb_ctx_setdomain()
738 ctx->ct_flags |= SMBCF_CMD_DOM; in smb_ctx_setdomain()
744 smb_ctx_setpassword(struct smb_ctx *ctx, const char *passwd, int from_cmd) in smb_ctx_setpassword() argument
750 if (strlen(passwd) >= sizeof (ctx->ct_password)) { in smb_ctx_setpassword()
760 if (!from_cmd && (ctx->ct_flags & SMBCF_CMD_PW)) in smb_ctx_setpassword()
763 memset(ctx->ct_password, 0, sizeof (ctx->ct_password)); in smb_ctx_setpassword()
765 (void) smb_simpledecrypt(ctx->ct_password, passwd); in smb_ctx_setpassword()
767 strlcpy(ctx->ct_password, passwd, in smb_ctx_setpassword()
768 sizeof (ctx->ct_password)); in smb_ctx_setpassword()
773 if (ctx->ct_password[0]) { in smb_ctx_setpassword()
774 err = ntlm_compute_nt_hash(ctx->ct_nthash, ctx->ct_password); in smb_ctx_setpassword()
777 err = ntlm_compute_lm_hash(ctx->ct_lmhash, ctx->ct_password); in smb_ctx_setpassword()
784 ctx->ct_flags |= SMBCF_CMD_PW; in smb_ctx_setpassword()
794 smb_ctx_setpwhash(smb_ctx_t *ctx, in smb_ctx_setpwhash() argument
799 if (ctx->ct_password[0] == '\0') in smb_ctx_setpwhash()
800 strlcpy(ctx->ct_password, "$HASH", in smb_ctx_setpwhash()
801 sizeof (ctx->ct_password)); in smb_ctx_setpwhash()
806 memcpy(ctx->ct_nthash, nthash, NTLM_HASH_SZ); in smb_ctx_setpwhash()
810 memcpy(ctx->ct_nthash, nthash, NTLM_HASH_SZ); in smb_ctx_setpwhash()
817 smb_ctx_setshare(struct smb_ctx *ctx, const char *share, int stype) in smb_ctx_setshare() argument
824 if (ctx->ct_origshare) in smb_ctx_setshare()
825 free(ctx->ct_origshare); in smb_ctx_setshare()
826 if ((ctx->ct_origshare = strdup(share)) == NULL) in smb_ctx_setshare()
829 ctx->ct_shtype_req = stype; in smb_ctx_setshare()
835 smb_ctx_setsrvaddr(struct smb_ctx *ctx, const char *addr) in smb_ctx_setsrvaddr() argument
839 if (ctx->ct_srvaddr_s) in smb_ctx_setsrvaddr()
840 free(ctx->ct_srvaddr_s); in smb_ctx_setsrvaddr()
841 if ((ctx->ct_srvaddr_s = strdup(addr)) == NULL) in smb_ctx_setsrvaddr()
851 smb_ctx_setsigning(struct smb_ctx *ctx, int enable, int require) in smb_ctx_setsigning() argument
853 ctx->ct_vopt &= ~SMBVOPT_SIGNING_MASK; in smb_ctx_setsigning()
855 ctx->ct_vopt |= SMBVOPT_SIGNING_ENABLED; in smb_ctx_setsigning()
857 ctx->ct_vopt |= SMBVOPT_SIGNING_REQUIRED; in smb_ctx_setsigning()
867 smb_ctx_setminver(struct smb_ctx *ctx, int ver) in smb_ctx_setminver() argument
869 if (ver < 0 || ver > ctx->ct_maxver) in smb_ctx_setminver()
871 ctx->ct_minver = (uint16_t)ver; in smb_ctx_setminver()
883 smb_ctx_setmaxver(struct smb_ctx *ctx, int ver) in smb_ctx_setmaxver() argument
885 if (ver < 1 || ver < ctx->ct_minver) in smb_ctx_setmaxver()
889 ctx->ct_maxver = (uint16_t)ver; in smb_ctx_setmaxver()
937 smb_parse_secopts(struct smb_ctx *ctx, const char *arg) in smb_parse_secopts() argument
970 ctx->ct_authflags = authflags; in smb_parse_secopts()
981 smb_ctx_opt(struct smb_ctx *ctx, int opt, const char *arg) in smb_ctx_opt() argument
993 error = smb_ctx_setsrvaddr(ctx, arg); in smb_ctx_opt()
997 ctx->ct_flags |= SMBCF_SRIGHTS; in smb_ctx_opt()
1000 ctx->ct_flags |= SMBCF_NOPWD; in smb_ctx_opt()
1007 error = smb_parse_owner(cp, &ctx->ct_owner, NULL); in smb_ctx_opt()
1018 error = smb_parse_secopts(ctx, arg); in smb_ctx_opt()
1025 error = smb_ctx_setdomain(ctx, tmp, TRUE); in smb_ctx_opt()
1059 smb_ctx_resolve(struct smb_ctx *ctx) in smb_ctx_resolve() argument
1061 struct smbioc_ossn *ssn = &ctx->ct_ssn; in smb_ctx_resolve()
1069 dump_ctx("before smb_ctx_resolve", ctx); in smb_ctx_resolve()
1071 ctx->ct_flags &= ~SMBCF_RESOLVED; in smb_ctx_resolve()
1073 if (ctx->ct_fullserver == NULL) { in smb_ctx_resolve()
1079 if (ctx->ct_minlevel >= SMBL_SHARE && in smb_ctx_resolve()
1080 ctx->ct_origshare == NULL) { in smb_ctx_resolve()
1083 0, ssn->ssn_user, ctx->ct_fullserver); in smb_ctx_resolve()
1086 error = nb_ctx_resolve(ctx->ct_nb); in smb_ctx_resolve()
1123 error = smb_ctx_getaddr(ctx); in smb_ctx_resolve()
1128 0, ctx->ct_fullserver, ais); in smb_ctx_resolve()
1131 assert(ctx->ct_addrinfo != NULL); in smb_ctx_resolve()
1138 if (ctx->ct_user[0] == '\0') { in smb_ctx_resolve()
1140 ctx->ct_domain[0] = '\0'; in smb_ctx_resolve()
1141 ctx->ct_authflags = SMB_AT_ANON; in smb_ctx_resolve()
1142 ctx->ct_vopt |= SMBVOPT_ANONYMOUS; in smb_ctx_resolve()
1143 ctx->ct_vopt &= ~SMBVOPT_SIGNING_REQUIRED; in smb_ctx_resolve()
1151 if (ctx->ct_user[0] != '\0') { in smb_ctx_resolve()
1157 if (ctx->ct_password[0] == '\0' && in smb_ctx_resolve()
1158 smb_get_keychain(ctx) == 0) { in smb_ctx_resolve()
1159 strlcpy(ctx->ct_password, "$HASH", in smb_ctx_resolve()
1160 sizeof (ctx->ct_password)); in smb_ctx_resolve()
1166 ctx->ct_authflags &= ctx->ct_minauth; in smb_ctx_resolve()
1169 if (ctx->ct_authflags == 0) { in smb_ctx_resolve()
1175 ctx->ct_flags |= SMBCF_RESOLVED; in smb_ctx_resolve()
1177 dump_ctx("after smb_ctx_resolve", ctx); in smb_ctx_resolve()
1216 smb_ctx_gethandle(struct smb_ctx *ctx) in smb_ctx_gethandle() argument
1221 if (ctx->ct_dev_fd != -1) { in smb_ctx_gethandle()
1222 rpc_cleanup_smbctx(ctx); in smb_ctx_gethandle()
1223 nsmb_close(ctx->ct_dev_fd); in smb_ctx_gethandle()
1224 ctx->ct_dev_fd = -1; in smb_ctx_gethandle()
1247 ctx->ct_dev_fd = fd; in smb_ctx_gethandle()
1256 smb_ctx_get_ssn(struct smb_ctx *ctx) in smb_ctx_get_ssn() argument
1260 if ((ctx->ct_flags & SMBCF_RESOLVED) == 0) in smb_ctx_get_ssn()
1267 err = smb_ctx_findvc(ctx); in smb_ctx_get_ssn()
1276 if (ctx->ct_user[0] != '\0' && in smb_ctx_get_ssn()
1277 ctx->ct_password[0] == '\0') in smb_ctx_get_ssn()
1284 err = smb_ctx_newvc(ctx); in smb_ctx_get_ssn()
1292 err = smb_ctx_findvc(ctx); in smb_ctx_get_ssn()
1302 smb_ctx_get_tree(struct smb_ctx *ctx) in smb_ctx_get_tree() argument
1307 if (ctx->ct_dev_fd < 0 || in smb_ctx_get_tree()
1308 ctx->ct_origshare == NULL) { in smb_ctx_get_tree()
1321 strlcpy(tcon->tc_sh.sh_name, ctx->ct_origshare, in smb_ctx_get_tree()
1325 tcon->tc_sh.sh_use = ctx->ct_shtype_req; in smb_ctx_get_tree()
1332 if (nsmb_ioctl(ctx->ct_dev_fd, cmd, tcon) == -1) { in smb_ctx_get_tree()
1341 if (ctx->ct_shtype_req != USE_WILDCARD && in smb_ctx_get_tree()
1342 ctx->ct_shtype_req != tcon->tc_sh.sh_type) { in smb_ctx_get_tree()
1345 0, ctx->ct_origshare); in smb_ctx_get_tree()
1359 smb_ctx_flags2(struct smb_ctx *ctx) in smb_ctx_flags2() argument
1363 if (nsmb_ioctl(ctx->ct_dev_fd, SMBIOC_FLAGS2, &flags2) == -1) { in smb_ctx_flags2()
1447 smb_ctx_readrcsection(struct smb_ctx *ctx, const char *sname, int level) in smb_ctx_readrcsection() argument
1458 error = smb_ctx_setcharset(ctx, p); in smb_ctx_readrcsection()
1505 ctx->ct_minver = minver; in smb_ctx_readrcsection()
1506 ctx->ct_maxver = maxver; in smb_ctx_readrcsection()
1515 if (minver > ctx->ct_maxver) { in smb_ctx_readrcsection()
1520 ctx->ct_minver = minver; in smb_ctx_readrcsection()
1524 if (maxver < ctx->ct_minver) { in smb_ctx_readrcsection()
1529 ctx->ct_maxver = maxver; in smb_ctx_readrcsection()
1541 ctx->ct_minauth = ival; in smb_ctx_readrcsection()
1561 (void) smb_ctx_setsigning(ctx, FALSE, FALSE); in smb_ctx_readrcsection()
1563 (void) smb_ctx_setsigning(ctx, TRUE, FALSE); in smb_ctx_readrcsection()
1565 (void) smb_ctx_setsigning(ctx, TRUE, TRUE); in smb_ctx_readrcsection()
1586 error = smb_ctx_setdomain(ctx, p, 0); in smb_ctx_readrcsection()
1594 error = smb_ctx_setdomain(ctx, p, 0); in smb_ctx_readrcsection()
1603 error = smb_ctx_setuser(ctx, p, 0); in smb_ctx_readrcsection()
1615 error = smb_ctx_setsrvaddr(ctx, p); in smb_ctx_readrcsection()
1627 error = smb_ctx_setpassword(ctx, p, 0); in smb_ctx_readrcsection()
1647 smb_ctx_readrc(struct smb_ctx *ctx) in smb_ctx_readrc() argument
1662 if (ctx->ct_user[0] == 0) in smb_ctx_readrc()
1663 (void) smb_ctx_setuser(ctx, pw.pw_name, B_FALSE); in smb_ctx_readrc()
1664 if (ctx->ct_home == NULL) in smb_ctx_readrc()
1665 ctx->ct_home = strdup(pw.pw_dir); in smb_ctx_readrc()
1668 if ((err = smb_open_rcfile(ctx->ct_home)) != 0) { in smb_ctx_readrc()
1684 smb_ctx_readrcsection(ctx, "default", 0); in smb_ctx_readrc()
1685 nb_ctx_readrcsection(smb_rc, ctx->ct_nb, "default", 0); in smb_ctx_readrc()
1691 if (ctx->ct_fullserver == NULL) in smb_ctx_readrc()
1696 smb_ctx_readrcsection(ctx, ctx->ct_fullserver, 1); in smb_ctx_readrc()
1702 if (ctx->ct_user[0] == 0) in smb_ctx_readrc()
1708 ctx->ct_fullserver, in smb_ctx_readrc()
1709 ctx->ct_user); in smb_ctx_readrc()
1710 smb_ctx_readrcsection(ctx, sname, 2); in smb_ctx_readrc()
1717 if (ctx->ct_origshare == NULL) in smb_ctx_readrc()
1723 ctx->ct_fullserver, in smb_ctx_readrc()
1724 ctx->ct_user, in smb_ctx_readrc()
1725 ctx->ct_origshare); in smb_ctx_readrc()
1726 smb_ctx_readrcsection(ctx, sname, 3); in smb_ctx_readrc()
1733 dump_ctx("after smb_ctx_readrc", ctx); in smb_ctx_readrc()