Lines Matching refs:ctx

100 rpc_cleanup_smbctx(struct smb_ctx *ctx)  in rpc_cleanup_smbctx()  argument
103 (*close_hook)(ctx); in rpc_cleanup_smbctx()
178 dump_ctx(char *where, struct smb_ctx *ctx) in dump_ctx() argument
181 dump_ctx_flags(ctx->ct_flags); in dump_ctx()
183 if (ctx->ct_locname) in dump_ctx()
184 printf(" localname=\"%s\"", ctx->ct_locname); in dump_ctx()
188 if (ctx->ct_fullserver) in dump_ctx()
189 printf(" fullserver=\"%s\"", ctx->ct_fullserver); in dump_ctx()
193 if (ctx->ct_srvaddr_s) in dump_ctx()
194 printf(" srvaddr_s=\"%s\"\n", ctx->ct_srvaddr_s); in dump_ctx()
198 if (ctx->ct_addrinfo) in dump_ctx()
199 dump_addrinfo(ctx->ct_addrinfo); in dump_ctx()
203 dump_iod_ssn(&ctx->ct_iod_ssn); in dump_ctx()
206 ctx->ct_origshare ? ctx->ct_origshare : "", in dump_ctx()
207 ctx->ct_shtype_req); in dump_ctx()
215 smb_ctx_t *ctx; in smb_ctx_alloc() local
218 ctx = malloc(sizeof (*ctx)); in smb_ctx_alloc()
219 if (ctx == NULL) in smb_ctx_alloc()
221 err = smb_ctx_init(ctx); in smb_ctx_alloc()
223 free(ctx); in smb_ctx_alloc()
226 *ctx_pp = ctx; in smb_ctx_alloc()
234 smb_ctx_init(struct smb_ctx *ctx) in smb_ctx_init() argument
240 bzero(ctx, sizeof (*ctx)); in smb_ctx_init()
242 error = nb_ctx_create(&ctx->ct_nb); in smb_ctx_init()
246 ctx->ct_dev_fd = -1; in smb_ctx_init()
247 ctx->ct_door_fd = -1; in smb_ctx_init()
248 ctx->ct_tran_fd = -1; in smb_ctx_init()
249 ctx->ct_parsedlevel = SMBL_NONE; in smb_ctx_init()
250 ctx->ct_minlevel = SMBL_NONE; in smb_ctx_init()
251 ctx->ct_maxlevel = SMBL_PATH; in smb_ctx_init()
254 ctx->ct_vopt = SMBVOPT_EXT_SEC; in smb_ctx_init()
255 ctx->ct_owner = SMBM_ANY_OWNER; in smb_ctx_init()
256 ctx->ct_authflags = SMB_AT_DEFAULT; in smb_ctx_init()
257 ctx->ct_minauth = SMB_AT_DEFAULT; in smb_ctx_init()
259 error = nb_ctx_setscope(ctx->ct_nb, ""); in smb_ctx_init()
268 error = smb_ctx_setuser(ctx, pw.pw_name, 0); in smb_ctx_init()
271 ctx->ct_home = strdup(pw.pw_name); in smb_ctx_init()
272 if (ctx->ct_home == NULL) in smb_ctx_init()
280 error = smb_ctx_setdomain(ctx, "WORKGROUP", 0); in smb_ctx_init()
323 smb_ctx_scan_argv(struct smb_ctx *ctx, int argc, char **argv, in smb_ctx_scan_argv() argument
337 ctx->ct_minlevel = minlevel; in smb_ctx_scan_argv()
338 ctx->ct_maxlevel = maxlevel; in smb_ctx_scan_argv()
339 ctx->ct_shtype_req = sharetype; in smb_ctx_scan_argv()
352 error = smb_ctx_setuser(ctx, "", TRUE); in smb_ctx_scan_argv()
353 ctx->ct_flags |= SMBCF_NOPWD; in smb_ctx_scan_argv()
357 error = smb_ctx_setuser(ctx, arg, TRUE); in smb_ctx_scan_argv()
385 error = smb_ctx_parseunc(ctx, arg, in smb_ctx_scan_argv()
396 smb_ctx_free(smb_ctx_t *ctx) in smb_ctx_free() argument
398 smb_ctx_done(ctx); in smb_ctx_free()
399 free(ctx); in smb_ctx_free()
403 smb_ctx_done(struct smb_ctx *ctx) in smb_ctx_done() argument
406 rpc_cleanup_smbctx(ctx); in smb_ctx_done()
408 if (ctx->ct_dev_fd != -1) { in smb_ctx_done()
409 close(ctx->ct_dev_fd); in smb_ctx_done()
410 ctx->ct_dev_fd = -1; in smb_ctx_done()
412 if (ctx->ct_door_fd != -1) { in smb_ctx_done()
413 close(ctx->ct_door_fd); in smb_ctx_done()
414 ctx->ct_door_fd = -1; in smb_ctx_done()
416 if (ctx->ct_tran_fd != -1) { in smb_ctx_done()
417 close(ctx->ct_tran_fd); in smb_ctx_done()
418 ctx->ct_tran_fd = -1; in smb_ctx_done()
420 if (ctx->ct_srvaddr_s) { in smb_ctx_done()
421 free(ctx->ct_srvaddr_s); in smb_ctx_done()
422 ctx->ct_srvaddr_s = NULL; in smb_ctx_done()
424 if (ctx->ct_nb) { in smb_ctx_done()
425 nb_ctx_done(ctx->ct_nb); in smb_ctx_done()
426 ctx->ct_nb = NULL; in smb_ctx_done()
428 if (ctx->ct_locname) { in smb_ctx_done()
429 free(ctx->ct_locname); in smb_ctx_done()
430 ctx->ct_locname = NULL; in smb_ctx_done()
432 if (ctx->ct_origshare) { in smb_ctx_done()
433 free(ctx->ct_origshare); in smb_ctx_done()
434 ctx->ct_origshare = NULL; in smb_ctx_done()
436 if (ctx->ct_fullserver) { in smb_ctx_done()
437 free(ctx->ct_fullserver); in smb_ctx_done()
438 ctx->ct_fullserver = NULL; in smb_ctx_done()
440 if (ctx->ct_addrinfo) { in smb_ctx_done()
441 freeaddrinfo(ctx->ct_addrinfo); in smb_ctx_done()
442 ctx->ct_addrinfo = NULL; in smb_ctx_done()
444 if (ctx->ct_home) in smb_ctx_done()
445 free(ctx->ct_home); in smb_ctx_done()
446 if (ctx->ct_srv_OS) { in smb_ctx_done()
447 free(ctx->ct_srv_OS); in smb_ctx_done()
448 ctx->ct_srv_OS = NULL; in smb_ctx_done()
450 if (ctx->ct_srv_LM) { in smb_ctx_done()
451 free(ctx->ct_srv_LM); in smb_ctx_done()
452 ctx->ct_srv_LM = NULL; in smb_ctx_done()
454 if (ctx->ct_mackey) { in smb_ctx_done()
455 free(ctx->ct_mackey); in smb_ctx_done()
456 ctx->ct_mackey = NULL; in smb_ctx_done()
484 smb_ctx_parseunc(struct smb_ctx *ctx, const char *unc, in smb_ctx_parseunc() argument
497 ctx->ct_minlevel = minlevel; in smb_ctx_parseunc()
498 ctx->ct_maxlevel = maxlevel; in smb_ctx_parseunc()
499 ctx->ct_shtype_req = sharetype; in smb_ctx_parseunc()
501 ctx->ct_parsedlevel = SMBL_NONE; in smb_ctx_parseunc()
517 error = smb_ctx_setdomain(ctx, unpercent(tmp), TRUE); in smb_ctx_parseunc()
524 if (ctx->ct_maxlevel < SMBL_VC) { in smb_ctx_parseunc()
534 error = smb_ctx_setpassword(ctx, unpercent(p1), TRUE); in smb_ctx_parseunc()
547 error = smb_ctx_setuser(ctx, unpercent(tmp), TRUE); in smb_ctx_parseunc()
550 ctx->ct_parsedlevel = SMBL_VC; in smb_ctx_parseunc()
572 error = smb_ctx_setfullserver(ctx, tmp); in smb_ctx_parseunc()
585 if (*p != 0 && ctx->ct_maxlevel < SMBL_SHARE) { in smb_ctx_parseunc()
599 if (*p1 == 0 && ctx->ct_minlevel >= SMBL_SHARE && in smb_ctx_parseunc()
600 !(ctx->ct_flags & SMBCF_BROWSEOK)) { in smb_ctx_parseunc()
611 error = smb_ctx_setshare(ctx, unpercent(p1), sharetype); 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()
907 smb_parse_secopts(struct smb_ctx *ctx, const char *arg) in smb_parse_secopts() argument
926 ctx->ct_vopt &= ~SMBVOPT_EXT_SEC; in smb_parse_secopts()
947 ctx->ct_authflags = authflags; in smb_parse_secopts()
958 smb_ctx_opt(struct smb_ctx *ctx, int opt, const char *arg) in smb_ctx_opt() argument
970 error = smb_ctx_setsrvaddr(ctx, arg); in smb_ctx_opt()
974 ctx->ct_flags |= SMBCF_SRIGHTS; in smb_ctx_opt()
977 ctx->ct_flags |= SMBCF_NOPWD; in smb_ctx_opt()
984 error = smb_parse_owner(cp, &ctx->ct_owner, NULL); in smb_ctx_opt()
995 error = smb_parse_secopts(ctx, arg); in smb_ctx_opt()
1002 error = smb_ctx_setdomain(ctx, tmp, TRUE); in smb_ctx_opt()
1036 smb_ctx_resolve(struct smb_ctx *ctx) in smb_ctx_resolve() argument
1038 struct smbioc_ossn *ssn = &ctx->ct_ssn; in smb_ctx_resolve()
1046 dump_ctx("before smb_ctx_resolve", ctx); in smb_ctx_resolve()
1048 ctx->ct_flags &= ~SMBCF_RESOLVED; in smb_ctx_resolve()
1050 if (ctx->ct_fullserver == NULL) { in smb_ctx_resolve()
1056 if (ctx->ct_minlevel >= SMBL_SHARE && in smb_ctx_resolve()
1057 ctx->ct_origshare == NULL) { in smb_ctx_resolve()
1060 0, ssn->ssn_user, ctx->ct_fullserver); in smb_ctx_resolve()
1063 error = nb_ctx_resolve(ctx->ct_nb); in smb_ctx_resolve()
1100 error = smb_ctx_getaddr(ctx); in smb_ctx_resolve()
1105 0, ctx->ct_fullserver, ais); in smb_ctx_resolve()
1108 assert(ctx->ct_addrinfo != NULL); in smb_ctx_resolve()
1115 if (ctx->ct_user[0] == '\0') { in smb_ctx_resolve()
1120 ctx->ct_authflags = SMB_AT_ANON; in smb_ctx_resolve()
1127 if (ctx->ct_password[0] == '\0') in smb_ctx_resolve()
1128 (void) smb_get_keychain(ctx); in smb_ctx_resolve()
1132 ctx->ct_authflags &= ctx->ct_minauth; in smb_ctx_resolve()
1134 if (ctx->ct_authflags == 0) { in smb_ctx_resolve()
1140 ctx->ct_flags |= SMBCF_RESOLVED; in smb_ctx_resolve()
1142 dump_ctx("after smb_ctx_resolve", ctx); in smb_ctx_resolve()
1181 smb_ctx_gethandle(struct smb_ctx *ctx) in smb_ctx_gethandle() argument
1185 if (ctx->ct_dev_fd != -1) { in smb_ctx_gethandle()
1186 rpc_cleanup_smbctx(ctx); in smb_ctx_gethandle()
1187 close(ctx->ct_dev_fd); in smb_ctx_gethandle()
1188 ctx->ct_dev_fd = -1; in smb_ctx_gethandle()
1189 ctx->ct_flags &= ~SMBCF_SSNACTIVE; in smb_ctx_gethandle()
1196 ctx->ct_dev_fd = fd; in smb_ctx_gethandle()
1205 smb_ctx_get_ssn(struct smb_ctx *ctx) in smb_ctx_get_ssn() argument
1209 if ((ctx->ct_flags & SMBCF_RESOLVED) == 0) in smb_ctx_get_ssn()
1212 if (ctx->ct_dev_fd < 0) { in smb_ctx_get_ssn()
1213 if ((err = smb_ctx_gethandle(ctx))) in smb_ctx_get_ssn()
1221 err = smb_ctx_findvc(ctx); in smb_ctx_get_ssn()
1229 err = smb_ctx_newvc(ctx); in smb_ctx_get_ssn()
1237 err = smb_ctx_findvc(ctx); in smb_ctx_get_ssn()
1277 smb_ctx_get_tree(struct smb_ctx *ctx) in smb_ctx_get_tree() argument
1283 if (ctx->ct_dev_fd < 0 || in smb_ctx_get_tree()
1284 ctx->ct_origshare == NULL) { in smb_ctx_get_tree()
1297 strlcpy(tcon->tc_sh.sh_name, ctx->ct_origshare, in smb_ctx_get_tree()
1309 stype = smb_use_type_str(ctx->ct_shtype_req); in smb_ctx_get_tree()
1318 if (ioctl(ctx->ct_dev_fd, cmd, tcon) == -1) { in smb_ctx_get_tree()
1327 if (ctx->ct_shtype_req != USE_WILDCARD && in smb_ctx_get_tree()
1331 0, ctx->ct_origshare); in smb_ctx_get_tree()
1346 smb_ctx_flags2(struct smb_ctx *ctx) in smb_ctx_flags2() argument
1350 if (ioctl(ctx->ct_dev_fd, SMBIOC_FLAGS2, &flags2) == -1) { in smb_ctx_flags2()
1363 smb_ctx_get_ssnkey(struct smb_ctx *ctx, uchar_t *key, size_t len) in smb_ctx_get_ssnkey() argument
1368 if (ioctl(ctx->ct_dev_fd, SMBIOC_GETSSNKEY, key) == -1) in smb_ctx_get_ssnkey()
1399 smb_ctx_readrcsection(struct smb_ctx *ctx, const char *sname, int level) in smb_ctx_readrcsection() argument
1408 error = smb_ctx_setcharset(ctx, p); in smb_ctx_readrcsection()
1431 ctx->ct_minauth = nvp->value; in smb_ctx_readrcsection()
1451 (void) smb_ctx_setsigning(ctx, FALSE, FALSE); in smb_ctx_readrcsection()
1453 (void) smb_ctx_setsigning(ctx, TRUE, FALSE); in smb_ctx_readrcsection()
1455 (void) smb_ctx_setsigning(ctx, TRUE, TRUE); in smb_ctx_readrcsection()
1476 error = smb_ctx_setdomain(ctx, p, 0); in smb_ctx_readrcsection()
1484 error = smb_ctx_setdomain(ctx, p, 0); in smb_ctx_readrcsection()
1493 error = smb_ctx_setuser(ctx, p, 0); in smb_ctx_readrcsection()
1505 error = smb_ctx_setsrvaddr(ctx, p); in smb_ctx_readrcsection()
1517 error = smb_ctx_setpassword(ctx, p, 0); in smb_ctx_readrcsection()
1537 smb_ctx_readrc(struct smb_ctx *ctx) in smb_ctx_readrc() argument
1545 home = ctx->ct_home; in smb_ctx_readrc()
1562 smb_ctx_readrcsection(ctx, "default", 0); in smb_ctx_readrc()
1563 nb_ctx_readrcsection(smb_rc, ctx->ct_nb, "default", 0); in smb_ctx_readrc()
1569 if (ctx->ct_fullserver == NULL) in smb_ctx_readrc()
1574 smb_ctx_readrcsection(ctx, ctx->ct_fullserver, 1); in smb_ctx_readrc()
1580 if (ctx->ct_user[0] == 0) in smb_ctx_readrc()
1586 ctx->ct_fullserver, in smb_ctx_readrc()
1587 ctx->ct_user); in smb_ctx_readrc()
1588 smb_ctx_readrcsection(ctx, sname, 2); in smb_ctx_readrc()
1595 if (ctx->ct_origshare == NULL) in smb_ctx_readrc()
1601 ctx->ct_fullserver, in smb_ctx_readrc()
1602 ctx->ct_user, in smb_ctx_readrc()
1603 ctx->ct_origshare); in smb_ctx_readrc()
1604 smb_ctx_readrcsection(ctx, sname, 3); in smb_ctx_readrc()
1611 dump_ctx("after smb_ctx_readrc", ctx); in smb_ctx_readrc()