summaryrefslogtreecommitdiff
path: root/sys/netsmb
diff options
context:
space:
mode:
authorMarcel Moolenaar <marcel@FreeBSD.org>2003-08-23 21:43:33 +0000
committerMarcel Moolenaar <marcel@FreeBSD.org>2003-08-23 21:43:33 +0000
commite51fe8759dcaaa412c74c06298576a134d9ec533 (patch)
tree9740f1cb5fa3620cec720b3ec06817bb11d02a6c /sys/netsmb
parentcfd5696d2217aead6f6e1dd9a51230579e9a30b2 (diff)
Notes
Diffstat (limited to 'sys/netsmb')
-rw-r--r--sys/netsmb/smb_conn.c145
-rw-r--r--sys/netsmb/smb_iod.c56
-rw-r--r--sys/netsmb/smb_subr.h36
3 files changed, 113 insertions, 124 deletions
diff --git a/sys/netsmb/smb_conn.c b/sys/netsmb/smb_conn.c
index 95421603bd14..23eb4be13835 100644
--- a/sys/netsmb/smb_conn.c
+++ b/sys/netsmb/smb_conn.c
@@ -128,46 +128,47 @@ smb_sm_lookupint(struct smb_vcspec *vcspec, struct smb_sharespec *shspec,
error = smb_vc_lock(vcp, LK_EXCLUSIVE, td);
if (error)
continue;
- itry {
- if ((vcp->obj.co_flags & SMBV_PRIVATE) ||
- !CONNADDREQ(vcp->vc_paddr, vcspec->sap) ||
- strcmp(vcp->vc_username, vcspec->username) != 0)
- ithrow(1);
- if (vcspec->owner != SMBM_ANY_OWNER) {
- if (vcp->vc_uid != vcspec->owner)
- ithrow(1);
- } else
- exact = 0;
- if (vcspec->group != SMBM_ANY_GROUP) {
- if (vcp->vc_grp != vcspec->group)
- ithrow(1);
- } else
- exact = 0;
- if (vcspec->mode & SMBM_EXACT) {
- if (!exact ||
- (vcspec->mode & SMBM_MASK) != vcp->vc_mode)
- ithrow(1);
- }
- if (smb_vc_access(vcp, scred, vcspec->mode) != 0)
- ithrow(1);
- vcspec->ssp = NULL;
- if (shspec)
- ithrow(smb_vc_lookupshare(vcp, shspec, scred, &vcspec->ssp));
- error = 0;
- break;
- } icatch(error) {
- smb_vc_unlock(vcp, 0, td);
- } ifinally {
- } iendtry;
- if (error == 0)
- break;
+ if ((vcp->obj.co_flags & SMBV_PRIVATE) ||
+ !CONNADDREQ(vcp->vc_paddr, vcspec->sap) ||
+ strcmp(vcp->vc_username, vcspec->username) != 0)
+ goto err1;
+ if (vcspec->owner != SMBM_ANY_OWNER) {
+ if (vcp->vc_uid != vcspec->owner)
+ goto err1;
+ } else
+ exact = 0;
+ if (vcspec->group != SMBM_ANY_GROUP) {
+ if (vcp->vc_grp != vcspec->group)
+ goto err1;
+ } else
+ exact = 0;
+ if (vcspec->mode & SMBM_EXACT) {
+ if (!exact || (vcspec->mode & SMBM_MASK) !=
+ vcp->vc_mode)
+ goto err1;
+ }
+ if (smb_vc_access(vcp, scred, vcspec->mode) != 0)
+ goto err1;
+ vcspec->ssp = NULL;
+ if (shspec) {
+ error = (int)smb_vc_lookupshare(vcp, shspec, scred,
+ &vcspec->ssp);
+ if (error)
+ goto fail;
+ }
+ error = 0;
+ break;
+ err1:
+ error = 1;
+ fail:
+ smb_vc_unlock(vcp, 0, td);
}
if (vcp) {
smb_vc_ref(vcp);
*vcpp = vcp;
}
- return error;
+ return (error);
}
int
@@ -413,39 +414,53 @@ smb_vc_create(struct smb_vcspec *vcspec,
vcp->vc_grp = gid;
smb_sl_init(&vcp->vc_stlock, "vcstlock");
- error = 0;
- itry {
- vcp->vc_paddr = dup_sockaddr(vcspec->sap, 1);
- ierror(vcp->vc_paddr == NULL, ENOMEM);
-
- vcp->vc_laddr = dup_sockaddr(vcspec->lap, 1);
- ierror(vcp->vc_laddr == NULL, ENOMEM);
-
- ierror((vcp->vc_pass = smb_strdup(vcspec->pass)) == NULL, ENOMEM);
+ error = ENOMEM;
- vcp->vc_domain = smb_strdup((domain && domain[0]) ? domain : "NODOMAIN");
- ierror(vcp->vc_domain == NULL, ENOMEM);
-
- ierror((vcp->vc_srvname = smb_strdup(vcspec->srvname)) == NULL, ENOMEM);
- ierror((vcp->vc_username = smb_strdup(vcspec->username)) == NULL, ENOMEM);
-
- ithrow(iconv_open("tolower", vcspec->localcs, &vcp->vc_tolower));
- ithrow(iconv_open("toupper", vcspec->localcs, &vcp->vc_toupper));
- if (vcspec->servercs[0]) {
- ithrow(iconv_open(vcspec->servercs, vcspec->localcs,
- &vcp->vc_toserver));
- ithrow(iconv_open(vcspec->localcs, vcspec->servercs,
- &vcp->vc_tolocal));
- }
+ vcp->vc_paddr = dup_sockaddr(vcspec->sap, 1);
+ if (vcp->vc_paddr == NULL)
+ goto fail;
+ vcp->vc_laddr = dup_sockaddr(vcspec->lap, 1);
+ if (vcp->vc_laddr == NULL)
+ goto fail;
+ vcp->vc_pass = smb_strdup(vcspec->pass);
+ if (vcp->vc_pass == NULL)
+ goto fail;
+ vcp->vc_domain = smb_strdup((domain && domain[0]) ? domain :
+ "NODOMAIN");
+ if (vcp->vc_domain == NULL)
+ goto fail;
+ vcp->vc_srvname = smb_strdup(vcspec->srvname);
+ if (vcp->vc_srvname == NULL)
+ goto fail;
+ vcp->vc_username = smb_strdup(vcspec->username);
+ if (vcp->vc_username == NULL)
+ goto fail;
+ error = (int)iconv_open("tolower", vcspec->localcs, &vcp->vc_tolower);
+ if (error)
+ goto fail;
+ error = (int)iconv_open("toupper", vcspec->localcs, &vcp->vc_toupper);
+ if (error)
+ goto fail;
+ if (vcspec->servercs[0]) {
+ error = (int)iconv_open(vcspec->servercs, vcspec->localcs,
+ &vcp->vc_toserver);
+ if (error)
+ goto fail;
+ error = (int)iconv_open(vcspec->localcs, vcspec->servercs,
+ &vcp->vc_tolocal);
+ if (error)
+ goto fail;
+ }
+ error = (int)smb_iod_create(vcp);
+ if (error)
+ goto fail;
+ *vcpp = vcp;
+ smb_co_addchild(&smb_vclist, VCTOCP(vcp));
+ return (0);
- ithrow(smb_iod_create(vcp));
- *vcpp = vcp;
- smb_co_addchild(&smb_vclist, VCTOCP(vcp));
- } icatch(error) {
- smb_vc_put(vcp, scred);
- } ifinally {
- } iendtry;
- return error;
+ fail:
+ smb_vc_put(vcp, scred);
+ return (error);
}
static void
diff --git a/sys/netsmb/smb_iod.c b/sys/netsmb/smb_iod.c
index 2c5e2c3917d2..ae9c45723060 100644
--- a/sys/netsmb/smb_iod.c
+++ b/sys/netsmb/smb_iod.c
@@ -141,29 +141,39 @@ smb_iod_connect(struct smbiod *iod)
}
vcp->vc_genid++;
error = 0;
- itry {
- ithrow(SMB_TRAN_CREATE(vcp, td));
- SMBIODEBUG("tcreate\n");
- if (vcp->vc_laddr) {
- ithrow(SMB_TRAN_BIND(vcp, vcp->vc_laddr, td));
- }
- SMBIODEBUG("tbind\n");
- ithrow(SMB_TRAN_CONNECT(vcp, vcp->vc_paddr, td));
- SMB_TRAN_SETPARAM(vcp, SMBTP_SELECTID, &iod->iod_flags);
- iod->iod_state = SMBIOD_ST_TRANACTIVE;
- SMBIODEBUG("tconnect\n");
-/* vcp->vc_mid = 0;*/
- ithrow(smb_smb_negotiate(vcp, &iod->iod_scred));
- SMBIODEBUG("snegotiate\n");
- ithrow(smb_smb_ssnsetup(vcp, &iod->iod_scred));
- iod->iod_state = SMBIOD_ST_VCACTIVE;
- SMBIODEBUG("completed\n");
- smb_iod_invrq(iod);
- } icatch(error) {
- smb_iod_dead(iod);
- } ifinally {
- } iendtry;
- return error;
+
+ error = (int)SMB_TRAN_CREATE(vcp, td);
+ if (error)
+ goto fail;
+ SMBIODEBUG("tcreate\n");
+ if (vcp->vc_laddr) {
+ error = (int)SMB_TRAN_BIND(vcp, vcp->vc_laddr, td);
+ if (error)
+ goto fail;
+ }
+ SMBIODEBUG("tbind\n");
+ error = (int)SMB_TRAN_CONNECT(vcp, vcp->vc_paddr, td);
+ if (error)
+ goto fail;
+ SMB_TRAN_SETPARAM(vcp, SMBTP_SELECTID, &iod->iod_flags);
+ iod->iod_state = SMBIOD_ST_TRANACTIVE;
+ SMBIODEBUG("tconnect\n");
+ /* vcp->vc_mid = 0;*/
+ error = (int)smb_smb_negotiate(vcp, &iod->iod_scred);
+ if (error)
+ goto fail;
+ SMBIODEBUG("snegotiate\n");
+ error = (int)smb_smb_ssnsetup(vcp, &iod->iod_scred);
+ if (error)
+ goto fail;
+ iod->iod_state = SMBIOD_ST_VCACTIVE;
+ SMBIODEBUG("completed\n");
+ smb_iod_invrq(iod);
+ return (0);
+
+ fail:
+ smb_iod_dead(iod);
+ return (error);
}
static int
diff --git a/sys/netsmb/smb_subr.h b/sys/netsmb/smb_subr.h
index 684f6bb6936b..276190f71dc2 100644
--- a/sys/netsmb/smb_subr.h
+++ b/sys/netsmb/smb_subr.h
@@ -86,42 +86,6 @@ void m_dumpm(struct mbuf *m);
#define SMB_STRFREE(p) do { if (p) smb_strfree(p); } while(0)
-/*
- * The simple try/catch/finally interface.
- * With GCC it is possible to allow more than one try/finally block per
- * function, but we'll avoid it to maintain portability.
- */
-#define itry { \
- __label__ _finlab, _catchlab; \
- int _tval; \
-
-#define icatch(var) \
- goto _finlab; \
- (void)&&_catchlab; \
- _catchlab: \
- var = _tval;
-
-#define ifinally (void)&&_finlab; \
- _finlab:
-#define iendtry }
-
-#define inocatch \
- goto _finlab; \
- (void)&&_catchlab; \
- _catchlab: \
-
-#define ithrow(t) do { \
- if ((_tval = (int)(t)) != 0) \
- goto _catchlab; \
- } while (0)
-
-#define ierror(t,e) do { \
- if (t) { \
- _tval = e; \
- goto _catchlab; \
- } \
- } while (0)
-
typedef u_int16_t smb_unichar;
typedef smb_unichar *smb_uniptr;