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()
188 dump_ctx(char *where, struct smb_ctx *ctx) in dump_ctx() argument
191 dump_ctx_flags(ctx->ct_flags); in dump_ctx()
193 if (ctx->ct_locname) in dump_ctx()
194 printf(" localname=\"%s\"", ctx->ct_locname); in dump_ctx()
198 if (ctx->ct_fullserver) in dump_ctx()
199 printf(" fullserver=\"%s\"", ctx->ct_fullserver); in dump_ctx()
203 if (ctx->ct_srvaddr_s) in dump_ctx()
204 printf(" srvaddr_s=\"%s\"\n", ctx->ct_srvaddr_s); in dump_ctx()
208 if (ctx->ct_addrinfo) in dump_ctx()
209 dump_addrinfo(ctx->ct_addrinfo); in dump_ctx()
213 dump_iod_ssn(&ctx->ct_iod_ssn); in dump_ctx()
216 ctx->ct_origshare ? ctx->ct_origshare : "", in dump_ctx()
217 ctx->ct_shtype_req); in dump_ctx()
219 printf(" ct_home=\"%s\"\n", ctx->ct_home); in dump_ctx()
220 printf(" ct_rpath=\"%s\"\n", ctx->ct_rpath); in dump_ctx()
226 smb_ctx_t *ctx; in smb_ctx_alloc() local
229 ctx = malloc(sizeof (*ctx)); in smb_ctx_alloc()
230 if (ctx == NULL) in smb_ctx_alloc()
232 err = smb_ctx_init(ctx); in smb_ctx_alloc()
234 free(ctx); in smb_ctx_alloc()
237 *ctx_pp = ctx; in smb_ctx_alloc()
245 smb_ctx_init(struct smb_ctx *ctx) in smb_ctx_init() argument
249 bzero(ctx, sizeof (*ctx)); in smb_ctx_init()
251 error = nb_ctx_create(&ctx->ct_nb); in smb_ctx_init()
255 ctx->ct_dev_fd = -1; in smb_ctx_init()
256 ctx->ct_door_fd = -1; in smb_ctx_init()
257 ctx->ct_tran_fd = -1; in smb_ctx_init()
258 ctx->ct_parsedlevel = SMBL_NONE; in smb_ctx_init()
259 ctx->ct_minlevel = SMBL_NONE; in smb_ctx_init()
260 ctx->ct_maxlevel = SMBL_PATH; in smb_ctx_init()
263 ctx->ct_vopt = SMBVOPT_EXT_SEC; in smb_ctx_init()
264 ctx->ct_owner = SMBM_ANY_OWNER; in smb_ctx_init()
265 ctx->ct_authflags = SMB_AT_DEFAULT; in smb_ctx_init()
266 ctx->ct_minauth = SMB_AT_MINAUTH; in smb_ctx_init()
271 strlcpy(ctx->ct_domain, default_domain, in smb_ctx_init()
272 sizeof (ctx->ct_domain)); in smb_ctx_init()
273 strlcpy(ctx->ct_user, default_user, in smb_ctx_init()
274 sizeof (ctx->ct_user)); in smb_ctx_init()
315 smb_ctx_scan_argv(struct smb_ctx *ctx, int argc, char **argv, in smb_ctx_scan_argv() argument
329 ctx->ct_minlevel = minlevel; in smb_ctx_scan_argv()
330 ctx->ct_maxlevel = maxlevel; in smb_ctx_scan_argv()
331 ctx->ct_shtype_req = sharetype; in smb_ctx_scan_argv()
344 error = smb_ctx_setuser(ctx, "", TRUE); in smb_ctx_scan_argv()
345 ctx->ct_flags |= SMBCF_NOPWD; in smb_ctx_scan_argv()
349 error = smb_ctx_setuser(ctx, arg, TRUE); in smb_ctx_scan_argv()
377 error = smb_ctx_parseunc(ctx, arg, in smb_ctx_scan_argv()
388 smb_ctx_free(smb_ctx_t *ctx) in smb_ctx_free() argument
390 smb_ctx_done(ctx); in smb_ctx_free()
391 free(ctx); in smb_ctx_free()
395 smb_ctx_done(struct smb_ctx *ctx) in smb_ctx_done() argument
398 rpc_cleanup_smbctx(ctx); in smb_ctx_done()
400 if (ctx->ct_dev_fd != -1) { in smb_ctx_done()
401 close(ctx->ct_dev_fd); in smb_ctx_done()
402 ctx->ct_dev_fd = -1; in smb_ctx_done()
404 if (ctx->ct_door_fd != -1) { in smb_ctx_done()
405 close(ctx->ct_door_fd); in smb_ctx_done()
406 ctx->ct_door_fd = -1; in smb_ctx_done()
408 if (ctx->ct_tran_fd != -1) { in smb_ctx_done()
409 close(ctx->ct_tran_fd); in smb_ctx_done()
410 ctx->ct_tran_fd = -1; in smb_ctx_done()
412 if (ctx->ct_srvaddr_s) { in smb_ctx_done()
413 free(ctx->ct_srvaddr_s); in smb_ctx_done()
414 ctx->ct_srvaddr_s = NULL; in smb_ctx_done()
416 if (ctx->ct_nb) { in smb_ctx_done()
417 nb_ctx_done(ctx->ct_nb); in smb_ctx_done()
418 ctx->ct_nb = NULL; in smb_ctx_done()
420 if (ctx->ct_locname) { in smb_ctx_done()
421 free(ctx->ct_locname); in smb_ctx_done()
422 ctx->ct_locname = NULL; in smb_ctx_done()
424 if (ctx->ct_origshare) { in smb_ctx_done()
425 free(ctx->ct_origshare); in smb_ctx_done()
426 ctx->ct_origshare = NULL; in smb_ctx_done()
428 if (ctx->ct_fullserver) { in smb_ctx_done()
429 free(ctx->ct_fullserver); in smb_ctx_done()
430 ctx->ct_fullserver = NULL; in smb_ctx_done()
432 if (ctx->ct_addrinfo) { in smb_ctx_done()
433 freeaddrinfo(ctx->ct_addrinfo); in smb_ctx_done()
434 ctx->ct_addrinfo = NULL; in smb_ctx_done()
436 if (ctx->ct_home) { in smb_ctx_done()
437 free(ctx->ct_home); in smb_ctx_done()
438 ctx->ct_home = NULL; in smb_ctx_done()
440 if (ctx->ct_rpath) { in smb_ctx_done()
441 free(ctx->ct_rpath); in smb_ctx_done()
442 ctx->ct_rpath = NULL; in smb_ctx_done()
444 if (ctx->ct_srv_OS) { in smb_ctx_done()
445 free(ctx->ct_srv_OS); in smb_ctx_done()
446 ctx->ct_srv_OS = NULL; in smb_ctx_done()
448 if (ctx->ct_srv_LM) { in smb_ctx_done()
449 free(ctx->ct_srv_LM); in smb_ctx_done()
450 ctx->ct_srv_LM = NULL; in smb_ctx_done()
452 if (ctx->ct_mackey) { in smb_ctx_done()
453 free(ctx->ct_mackey); in smb_ctx_done()
454 ctx->ct_mackey = NULL; in smb_ctx_done()
465 smb_ctx_parseunc(struct smb_ctx *ctx, const char *unc, in smb_ctx_parseunc() argument
478 ctx->ct_minlevel = minlevel; in smb_ctx_parseunc()
479 ctx->ct_maxlevel = maxlevel; in smb_ctx_parseunc()
480 ctx->ct_shtype_req = sharetype; in smb_ctx_parseunc()
481 ctx->ct_parsedlevel = SMBL_NONE; in smb_ctx_parseunc()
534 error = smb_ctx_setfullserver(ctx, host); in smb_ctx_parseunc()
537 ctx->ct_parsedlevel = SMBL_VC; in smb_ctx_parseunc()
540 error = smb_ctx_setdomain(ctx, dom, TRUE); in smb_ctx_parseunc()
551 if (ctx->ct_maxlevel < SMBL_VC) { in smb_ctx_parseunc()
557 error = smb_ctx_setuser(ctx, usr, TRUE); in smb_ctx_parseunc()
562 error = smb_ctx_setpassword(ctx, pw, TRUE); in smb_ctx_parseunc()
584 if (ctx->ct_maxlevel < SMBL_SHARE) { in smb_ctx_parseunc()
600 error = smb_ctx_setshare(ctx, p, sharetype); in smb_ctx_parseunc()
603 ctx->ct_parsedlevel = SMBL_SHARE; in smb_ctx_parseunc()
610 free(ctx->ct_rpath); in smb_ctx_parseunc()
611 ctx->ct_rpath = strdup(path); in smb_ctx_parseunc()
613 } else if (ctx->ct_minlevel >= SMBL_SHARE) { in smb_ctx_parseunc()
624 dump_ctx("after smb_ctx_parseunc", ctx); in smb_ctx_parseunc()
631 smb_ctx_setcharset(struct smb_ctx *ctx, const char *arg) in smb_ctx_setcharset() argument
634 int cslen = sizeof (ctx->ct_ssn.ioc_localcs); in smb_ctx_setcharset()
650 localcs = memcpy(ctx->ct_ssn.ioc_localcs, arg, lcslen); in smb_ctx_setcharset()
652 servercs = strcpy(ctx->ct_ssn.ioc_servercs, cp); in smb_ctx_setcharset()
666 smb_ctx_setauthflags(struct smb_ctx *ctx, int flags) in smb_ctx_setauthflags() argument
668 ctx->ct_authflags = flags; in smb_ctx_setauthflags()
673 smb_ctx_setfullserver(struct smb_ctx *ctx, const char *name) in smb_ctx_setfullserver() argument
679 if (ctx->ct_fullserver) in smb_ctx_setfullserver()
680 free(ctx->ct_fullserver); in smb_ctx_setfullserver()
681 ctx->ct_fullserver = p; in smb_ctx_setfullserver()
686 smb_ctx_setserver(struct smb_ctx *ctx, const char *name) in smb_ctx_setserver() argument
688 strlcpy(ctx->ct_srvname, name, in smb_ctx_setserver()
689 sizeof (ctx->ct_srvname)); in smb_ctx_setserver()
694 smb_ctx_setuser(struct smb_ctx *ctx, const char *name, int from_cmd) in smb_ctx_setuser() argument
697 if (strlen(name) >= sizeof (ctx->ct_user)) { in smb_ctx_setuser()
707 if (!from_cmd && (ctx->ct_flags & SMBCF_CMD_USR)) in smb_ctx_setuser()
710 strlcpy(ctx->ct_user, name, in smb_ctx_setuser()
711 sizeof (ctx->ct_user)); in smb_ctx_setuser()
715 ctx->ct_flags |= SMBCF_CMD_USR; in smb_ctx_setuser()
726 smb_ctx_setdomain(struct smb_ctx *ctx, const char *name, int from_cmd) in smb_ctx_setdomain() argument
729 if (strlen(name) >= sizeof (ctx->ct_domain)) { in smb_ctx_setdomain()
739 if (!from_cmd && (ctx->ct_flags & SMBCF_CMD_DOM)) in smb_ctx_setdomain()
742 strlcpy(ctx->ct_domain, name, in smb_ctx_setdomain()
743 sizeof (ctx->ct_domain)); in smb_ctx_setdomain()
747 ctx->ct_flags |= SMBCF_CMD_DOM; in smb_ctx_setdomain()
753 smb_ctx_setpassword(struct smb_ctx *ctx, const char *passwd, int from_cmd) in smb_ctx_setpassword() argument
759 if (strlen(passwd) >= sizeof (ctx->ct_password)) { in smb_ctx_setpassword()
769 if (!from_cmd && (ctx->ct_flags & SMBCF_CMD_PW)) in smb_ctx_setpassword()
772 memset(ctx->ct_password, 0, sizeof (ctx->ct_password)); in smb_ctx_setpassword()
774 (void) smb_simpledecrypt(ctx->ct_password, passwd); in smb_ctx_setpassword()
776 strlcpy(ctx->ct_password, passwd, in smb_ctx_setpassword()
777 sizeof (ctx->ct_password)); in smb_ctx_setpassword()
782 if (ctx->ct_password[0]) { in smb_ctx_setpassword()
783 err = ntlm_compute_nt_hash(ctx->ct_nthash, ctx->ct_password); in smb_ctx_setpassword()
786 err = ntlm_compute_lm_hash(ctx->ct_lmhash, ctx->ct_password); in smb_ctx_setpassword()
793 ctx->ct_flags |= SMBCF_CMD_PW; in smb_ctx_setpassword()
803 smb_ctx_setpwhash(smb_ctx_t *ctx, in smb_ctx_setpwhash() argument
808 if (ctx->ct_password[0] == '\0') in smb_ctx_setpwhash()
809 strlcpy(ctx->ct_password, "$HASH", in smb_ctx_setpwhash()
810 sizeof (ctx->ct_password)); in smb_ctx_setpwhash()
815 memcpy(ctx->ct_nthash, nthash, NTLM_HASH_SZ); in smb_ctx_setpwhash()
819 memcpy(ctx->ct_nthash, nthash, NTLM_HASH_SZ); in smb_ctx_setpwhash()
826 smb_ctx_setshare(struct smb_ctx *ctx, const char *share, int stype) in smb_ctx_setshare() argument
833 if (ctx->ct_origshare) in smb_ctx_setshare()
834 free(ctx->ct_origshare); in smb_ctx_setshare()
835 if ((ctx->ct_origshare = strdup(share)) == NULL) in smb_ctx_setshare()
838 ctx->ct_shtype_req = stype; in smb_ctx_setshare()
844 smb_ctx_setsrvaddr(struct smb_ctx *ctx, const char *addr) in smb_ctx_setsrvaddr() argument
848 if (ctx->ct_srvaddr_s) in smb_ctx_setsrvaddr()
849 free(ctx->ct_srvaddr_s); in smb_ctx_setsrvaddr()
850 if ((ctx->ct_srvaddr_s = strdup(addr)) == NULL) in smb_ctx_setsrvaddr()
860 smb_ctx_setsigning(struct smb_ctx *ctx, int enable, int require) in smb_ctx_setsigning() argument
862 ctx->ct_vopt &= ~SMBVOPT_SIGNING_MASK; in smb_ctx_setsigning()
864 ctx->ct_vopt |= SMBVOPT_SIGNING_ENABLED; in smb_ctx_setsigning()
866 ctx->ct_vopt |= SMBVOPT_SIGNING_REQUIRED; in smb_ctx_setsigning()
916 smb_parse_secopts(struct smb_ctx *ctx, const char *arg) in smb_parse_secopts() argument
935 ctx->ct_vopt &= ~SMBVOPT_EXT_SEC; in smb_parse_secopts()
956 ctx->ct_authflags = authflags; in smb_parse_secopts()
967 smb_ctx_opt(struct smb_ctx *ctx, int opt, const char *arg) in smb_ctx_opt() argument
979 error = smb_ctx_setsrvaddr(ctx, arg); in smb_ctx_opt()
983 ctx->ct_flags |= SMBCF_SRIGHTS; in smb_ctx_opt()
986 ctx->ct_flags |= SMBCF_NOPWD; in smb_ctx_opt()
993 error = smb_parse_owner(cp, &ctx->ct_owner, NULL); in smb_ctx_opt()
1004 error = smb_parse_secopts(ctx, arg); in smb_ctx_opt()
1011 error = smb_ctx_setdomain(ctx, tmp, TRUE); in smb_ctx_opt()
1045 smb_ctx_resolve(struct smb_ctx *ctx) in smb_ctx_resolve() argument
1047 struct smbioc_ossn *ssn = &ctx->ct_ssn; in smb_ctx_resolve()
1055 dump_ctx("before smb_ctx_resolve", ctx); in smb_ctx_resolve()
1057 ctx->ct_flags &= ~SMBCF_RESOLVED; in smb_ctx_resolve()
1059 if (ctx->ct_fullserver == NULL) { in smb_ctx_resolve()
1065 if (ctx->ct_minlevel >= SMBL_SHARE && in smb_ctx_resolve()
1066 ctx->ct_origshare == NULL) { in smb_ctx_resolve()
1069 0, ssn->ssn_user, ctx->ct_fullserver); in smb_ctx_resolve()
1072 error = nb_ctx_resolve(ctx->ct_nb); in smb_ctx_resolve()
1109 error = smb_ctx_getaddr(ctx); in smb_ctx_resolve()
1114 0, ctx->ct_fullserver, ais); in smb_ctx_resolve()
1117 assert(ctx->ct_addrinfo != NULL); in smb_ctx_resolve()
1124 if (ctx->ct_user[0] != '\0') { in smb_ctx_resolve()
1130 if (ctx->ct_password[0] == '\0') in smb_ctx_resolve()
1131 (void) smb_get_keychain(ctx); in smb_ctx_resolve()
1135 ctx->ct_authflags &= ctx->ct_minauth; in smb_ctx_resolve()
1137 if (ctx->ct_authflags == 0) { in smb_ctx_resolve()
1143 ctx->ct_flags |= SMBCF_RESOLVED; in smb_ctx_resolve()
1145 dump_ctx("after smb_ctx_resolve", ctx); in smb_ctx_resolve()
1167 smb_ctx_gethandle(struct smb_ctx *ctx) in smb_ctx_gethandle() argument
1172 if (ctx->ct_dev_fd != -1) { in smb_ctx_gethandle()
1173 rpc_cleanup_smbctx(ctx); in smb_ctx_gethandle()
1174 close(ctx->ct_dev_fd); in smb_ctx_gethandle()
1175 ctx->ct_dev_fd = -1; in smb_ctx_gethandle()
1176 ctx->ct_flags &= ~SMBCF_SSNACTIVE; in smb_ctx_gethandle()
1199 ctx->ct_dev_fd = fd; in smb_ctx_gethandle()
1208 smb_ctx_get_ssn(struct smb_ctx *ctx) in smb_ctx_get_ssn() argument
1212 if ((ctx->ct_flags & SMBCF_RESOLVED) == 0) in smb_ctx_get_ssn()
1215 if (ctx->ct_dev_fd < 0) { in smb_ctx_get_ssn()
1216 if ((err = smb_ctx_gethandle(ctx))) in smb_ctx_get_ssn()
1224 err = smb_ctx_findvc(ctx); in smb_ctx_get_ssn()
1232 err = smb_ctx_newvc(ctx); in smb_ctx_get_ssn()
1240 err = smb_ctx_findvc(ctx); in smb_ctx_get_ssn()
1250 smb_ctx_get_tree(struct smb_ctx *ctx) in smb_ctx_get_tree() argument
1255 if (ctx->ct_dev_fd < 0 || in smb_ctx_get_tree()
1256 ctx->ct_origshare == NULL) { in smb_ctx_get_tree()
1269 strlcpy(tcon->tc_sh.sh_name, ctx->ct_origshare, in smb_ctx_get_tree()
1273 tcon->tc_sh.sh_use = ctx->ct_shtype_req; in smb_ctx_get_tree()
1280 if (ioctl(ctx->ct_dev_fd, cmd, tcon) == -1) { in smb_ctx_get_tree()
1289 if (ctx->ct_shtype_req != USE_WILDCARD && in smb_ctx_get_tree()
1290 ctx->ct_shtype_req != tcon->tc_sh.sh_type) { in smb_ctx_get_tree()
1293 0, ctx->ct_origshare); in smb_ctx_get_tree()
1307 smb_ctx_flags2(struct smb_ctx *ctx) in smb_ctx_flags2() argument
1311 if (ioctl(ctx->ct_dev_fd, SMBIOC_FLAGS2, &flags2) == -1) { in smb_ctx_flags2()
1360 smb_ctx_readrcsection(struct smb_ctx *ctx, const char *sname, int level) in smb_ctx_readrcsection() argument
1369 error = smb_ctx_setcharset(ctx, p); in smb_ctx_readrcsection()
1392 ctx->ct_minauth = nvp->value; in smb_ctx_readrcsection()
1412 (void) smb_ctx_setsigning(ctx, FALSE, FALSE); in smb_ctx_readrcsection()
1414 (void) smb_ctx_setsigning(ctx, TRUE, FALSE); in smb_ctx_readrcsection()
1416 (void) smb_ctx_setsigning(ctx, TRUE, TRUE); in smb_ctx_readrcsection()
1437 error = smb_ctx_setdomain(ctx, p, 0); in smb_ctx_readrcsection()
1445 error = smb_ctx_setdomain(ctx, p, 0); in smb_ctx_readrcsection()
1454 error = smb_ctx_setuser(ctx, p, 0); in smb_ctx_readrcsection()
1466 error = smb_ctx_setsrvaddr(ctx, p); in smb_ctx_readrcsection()
1478 error = smb_ctx_setpassword(ctx, p, 0); in smb_ctx_readrcsection()
1498 smb_ctx_readrc(struct smb_ctx *ctx) in smb_ctx_readrc() argument
1513 if (ctx->ct_user[0] == 0) in smb_ctx_readrc()
1514 (void) smb_ctx_setuser(ctx, pw.pw_name, B_FALSE); in smb_ctx_readrc()
1515 if (ctx->ct_home == NULL) in smb_ctx_readrc()
1516 ctx->ct_home = strdup(pw.pw_dir); in smb_ctx_readrc()
1519 if ((err = smb_open_rcfile(ctx->ct_home)) != 0) { in smb_ctx_readrc()
1535 smb_ctx_readrcsection(ctx, "default", 0); in smb_ctx_readrc()
1536 nb_ctx_readrcsection(smb_rc, ctx->ct_nb, "default", 0); in smb_ctx_readrc()
1542 if (ctx->ct_fullserver == NULL) in smb_ctx_readrc()
1547 smb_ctx_readrcsection(ctx, ctx->ct_fullserver, 1); in smb_ctx_readrc()
1553 if (ctx->ct_user[0] == 0) in smb_ctx_readrc()
1559 ctx->ct_fullserver, in smb_ctx_readrc()
1560 ctx->ct_user); in smb_ctx_readrc()
1561 smb_ctx_readrcsection(ctx, sname, 2); in smb_ctx_readrc()
1568 if (ctx->ct_origshare == NULL) in smb_ctx_readrc()
1574 ctx->ct_fullserver, in smb_ctx_readrc()
1575 ctx->ct_user, in smb_ctx_readrc()
1576 ctx->ct_origshare); in smb_ctx_readrc()
1577 smb_ctx_readrcsection(ctx, sname, 3); in smb_ctx_readrc()
1584 dump_ctx("after smb_ctx_readrc", ctx); in smb_ctx_readrc()