Lines Matching defs:vcp

62 static int  smb_vc_disconnect(struct smb_vc *vcp);
123 struct smb_vc *vcp;
129 vcp = NULL;
131 vcp = (struct smb_vc *)scp;
132 error = smb_vc_lock(vcp);
136 if ((vcp->obj.co_flags & SMBV_PRIVATE) ||
137 !CONNADDREQ(vcp->vc_paddr, vcspec->sap) ||
138 strcmp(vcp->vc_username, vcspec->username) != 0)
141 if (vcp->vc_uid != vcspec->owner)
146 if (vcp->vc_grp != vcspec->group)
152 vcp->vc_mode)
155 if (smb_vc_access(vcp, scred, vcspec->mode) != 0)
159 error = (int)smb_vc_lookupshare(vcp, shspec, scred,
169 smb_vc_unlock(vcp);
171 if (vcp) {
172 smb_vc_ref(vcp);
173 *vcpp = vcp;
182 struct smb_vc *vcp;
186 *vcpp = vcp = NULL;
196 error = smb_sm_lookupint(vcspec, NULL, scred, &vcp);
198 error = smb_vc_create(vcspec, scred, &vcp);
201 error = smb_vc_connect(vcp, scred);
207 error = smb_share_create(vcp, shspec, scred, &ssp);
218 *vcpp = vcp;
219 else if (vcp) {
220 smb_vc_lock(vcp);
221 smb_vc_put(vcp, scred);
389 struct smb_vc *vcp;
406 vcp = smb_zmalloc(sizeof(*vcp), M_SMBCONN, M_WAITOK);
407 smb_co_init(VCTOCP(vcp), SMBL_VC, "smb_vc ilock", "smb_vc");
408 vcp->obj.co_free = smb_vc_free;
409 vcp->obj.co_gone = smb_vc_gone;
410 vcp->vc_number = smb_vcnext++;
411 vcp->vc_timo = SMB_DEFRQTIMO;
412 vcp->vc_smbuid = SMB_UID_UNKNOWN;
413 vcp->vc_mode = vcspec->rights & SMBM_MASK;
414 vcp->obj.co_flags = vcspec->flags & (SMBV_PRIVATE | SMBV_SINGLESHARE);
415 vcp->vc_tdesc = &smb_tran_nbtcp_desc;
416 vcp->vc_seqno = 0;
417 vcp->vc_mackey = NULL;
418 vcp->vc_mackeylen = 0;
424 vcp->vc_uid = uid;
425 vcp->vc_grp = gid;
427 smb_sl_init(&vcp->vc_stlock, "vcstlock");
430 vcp->vc_paddr = sodupsockaddr(vcspec->sap, M_WAITOK);
431 if (vcp->vc_paddr == NULL)
433 vcp->vc_laddr = sodupsockaddr(vcspec->lap, M_WAITOK);
434 if (vcp->vc_laddr == NULL)
436 vcp->vc_pass = smb_strdup(vcspec->pass);
437 if (vcp->vc_pass == NULL)
439 vcp->vc_domain = smb_strdup((domain && domain[0]) ? domain :
441 if (vcp->vc_domain == NULL)
443 vcp->vc_srvname = smb_strdup(vcspec->srvname);
444 if (vcp->vc_srvname == NULL)
446 vcp->vc_username = smb_strdup(vcspec->username);
447 if (vcp->vc_username == NULL)
449 error = (int)iconv_open("tolower", vcspec->localcs, &vcp->vc_tolower);
452 error = (int)iconv_open("toupper", vcspec->localcs, &vcp->vc_toupper);
457 &vcp->vc_cp_toserver);
461 &vcp->vc_cp_tolocal);
464 vcp->vc_toserver = vcp->vc_cp_toserver;
465 vcp->vc_tolocal = vcp->vc_cp_tolocal;
469 &vcp->vc_ucs_toserver);
472 &vcp->vc_ucs_tolocal);
475 if (vcp->vc_ucs_toserver)
476 iconv_close(vcp->vc_ucs_toserver);
477 vcp->vc_ucs_toserver = NULL;
478 vcp->vc_ucs_tolocal = NULL;
481 error = (int)smb_iod_create(vcp);
484 *vcpp = vcp;
485 smb_co_addchild(&smb_vclist, VCTOCP(vcp));
489 smb_vc_put(vcp, scred);
496 struct smb_vc *vcp = CPTOVC(cp);
498 if (vcp->vc_iod)
499 smb_iod_destroy(vcp->vc_iod);
500 SMB_STRFREE(vcp->vc_username);
501 SMB_STRFREE(vcp->vc_srvname);
502 SMB_STRFREE(vcp->vc_pass);
503 SMB_STRFREE(vcp->vc_domain);
504 if (vcp->vc_mackey)
505 free(vcp->vc_mackey, M_SMBTEMP);
506 if (vcp->vc_paddr)
507 free(vcp->vc_paddr, M_SONAME);
508 if (vcp->vc_laddr)
509 free(vcp->vc_laddr, M_SONAME);
510 if (vcp->vc_tolower)
511 iconv_close(vcp->vc_tolower);
512 if (vcp->vc_toupper)
513 iconv_close(vcp->vc_toupper);
514 if (vcp->vc_tolocal)
515 vcp->vc_tolocal = NULL;
516 if (vcp->vc_toserver)
517 vcp->vc_toserver = NULL;
518 if (vcp->vc_cp_tolocal)
519 iconv_close(vcp->vc_cp_tolocal);
520 if (vcp->vc_cp_toserver)
521 iconv_close(vcp->vc_cp_toserver);
522 if (vcp->vc_ucs_tolocal)
523 iconv_close(vcp->vc_ucs_tolocal);
524 if (vcp->vc_ucs_toserver)
525 iconv_close(vcp->vc_ucs_toserver);
526 smb_co_done(VCTOCP(vcp));
527 smb_sl_destroy(&vcp->vc_stlock);
528 free(vcp, M_SMBCONN);
537 struct smb_vc *vcp = CPTOVC(cp);
539 smb_vc_disconnect(vcp);
543 smb_vc_ref(struct smb_vc *vcp)
545 smb_co_ref(VCTOCP(vcp));
549 smb_vc_rele(struct smb_vc *vcp, struct smb_cred *scred)
551 smb_co_rele(VCTOCP(vcp), scred);
555 smb_vc_get(struct smb_vc *vcp, struct smb_cred *scred)
560 cp = VCTOCP(vcp);
568 smb_vc_put(struct smb_vc *vcp, struct smb_cred *scred)
570 smb_co_put(VCTOCP(vcp), scred);
574 smb_vc_lock(struct smb_vc *vcp)
579 cp = VCTOCP(vcp);
587 smb_vc_unlock(struct smb_vc *vcp)
592 cp = VCTOCP(vcp);
599 smb_vc_access(struct smb_vc *vcp, struct smb_cred *scred, mode_t mode)
603 if (smb_suser(cred) == 0 || cred->cr_uid == vcp->vc_uid)
606 if (!groupmember(vcp->vc_grp, cred))
608 return (vcp->vc_mode & mode) == mode ? 0 : EACCES;
644 smb_vc_lookupshare(struct smb_vc *vcp, struct smb_sharespec *dp,
653 SMBCO_FOREACH(scp, VCTOCP(vcp)) {
672 smb_vc_connect(struct smb_vc *vcp, struct smb_cred *scred)
675 return smb_iod_request(vcp->vc_iod, SMBIOD_EV_CONNECT | SMBIOD_EV_SYNC, NULL);
683 smb_vc_disconnect(struct smb_vc *vcp)
686 if (vcp->vc_iod != NULL)
687 smb_iod_request(vcp->vc_iod, SMBIOD_EV_DISCONNECT |
695 smb_vc_getpass(struct smb_vc *vcp)
697 if (vcp->vc_pass)
698 return vcp->vc_pass;
703 smb_vc_getinfo(struct smb_vc *vcp, struct smb_vc_info *vip)
707 vip->usecount = vcp->obj.co_usecount;
708 vip->uid = vcp->vc_uid;
709 vip->gid = vcp->vc_grp;
710 vip->mode = vcp->vc_mode;
711 vip->flags = vcp->obj.co_flags;
712 vip->sopt = vcp->vc_sopt;
713 vip->iodstate = vcp->vc_iod->iod_state;
715 snprintf(vip->srvname, sizeof(vip->srvname), "%s", vcp->vc_srvname);
716 snprintf(vip->vcname, sizeof(vip->vcname), "%s", vcp->vc_username);
721 smb_vc_nextmid(struct smb_vc *vcp)
725 sx_xlock(&vcp->obj.co_interlock);
726 r = vcp->vc_mid++;
727 sx_unlock(&vcp->obj.co_interlock);
740 smb_share_create(struct smb_vc *vcp, struct smb_sharespec *shspec,
758 error = smb_vc_lookupshare(vcp, shspec, scred, &ssp);
780 smb_co_addchild(VCTOCP(vcp), SSTOCP(ssp));
889 struct smb_vc *vcp;
893 vcp = SSTOVC(ssp);
894 if (vcp->vc_pass)
895 return vcp->vc_pass;
922 struct smb_vc *vcp;
935 vcp = (struct smb_vc *)scp1;
936 error = smb_vc_lock(vcp);
939 smb_vc_getinfo(vcp, &vci);
942 smb_vc_unlock(vcp);
945 SMBCO_FOREACH(scp2, VCTOCP(vcp)) {
958 smb_vc_unlock(vcp);