1
0
mirror of https://github.com/samba-team/samba.git synced 2025-08-03 04:22:09 +03:00

Fix some bugs and prepare for some other bug fixes ...

(This used to be commit 4ae7812353)
This commit is contained in:
Richard Sharpe
2001-01-29 09:34:24 +00:00
parent 7eea846f52
commit b370588b9c

View File

@ -179,6 +179,7 @@ smbc_parse_path(const char *fname, char *server, char *share, char *path,
char *user, char *password) /* FIXME, lengths of strings */
{
static pstring s;
pstring userinfo;
char *p;
int len;
fstring workgroup;
@ -215,7 +216,47 @@ smbc_parse_path(const char *fname, char *server, char *share, char *path,
}
/* ok, its for us. Now parse out the server, share etc. */
/*
* ok, its for us. Now parse out the server, share etc.
*
* However, we want to parse out [[domain;]user[:password]@] if it
* exists ...
*/
if (strchr(p, '@')) {
pstring username, passwd, domain;
char *u = userinfo;
next_token(&p, userinfo, "@", sizeof(fstring));
username[0] = passwd[0] = domain[0] = 0;
if (strchr(u, ';')) {
next_token(&u, domain, ";", sizeof(fstring));
}
if (strchr(u, ':')) {
next_token(&u, username, ":", sizeof(fstring));
pstrcpy(passwd, u);
}
else {
pstrcpy(username, u);
}
if (username[0])
strncpy(user, username, sizeof(fstring)); /* FIXME, size and domain */
if (passwd[0])
strncpy(password, passwd, sizeof(fstring)); /* FIXME, size */
}
if (!next_token(&p, server, "/", sizeof(fstring))) {
@ -298,14 +339,18 @@ struct smbc_server *smbc_server(char *server, char *share,
return NULL;
}
/* Pick up the auth info here, once we know we need to connect */
/*
* Pick up the auth info here, once we know we need to connect
* But only if we do not have a username and password ...
*/
smbc_auth_fn(server, share, workgroup, sizeof(fstring),
username, sizeof(fstring), password, sizeof(fstring));
if (!username[0] || !password[0])
smbc_auth_fn(server, share, workgroup, sizeof(fstring),
username, sizeof(fstring), password, sizeof(fstring));
/*
* However, smbc_auth_fn may have picked up info relating to an
* existing connection, so try for and existing connection again ...
* existing connection, so try for an existing connection again ...
*/
for (srv=smbc_srvs;srv;srv=srv->next) {
@ -437,6 +482,9 @@ struct smbc_server *smbc_server(char *server, char *share,
/*
*Initialise the library etc
*
* We accept valiv values for debug from 0 to 100,
* and insist that fn must be non-null.
*/
int smbc_init(smbc_get_auth_data_fn fn, const char *wgroup, int debug)
@ -446,6 +494,18 @@ int smbc_init(smbc_get_auth_data_fn fn, const char *wgroup, int debug)
int p, pid;
char *user = NULL, *host = NULL, *home = NULL, *pname="libsmbclient";
/*
* Next lot ifdef'd out until test suite fixed ...
*/
#ifdef 0
if (!fn || debug < 0 || debug > 100) {
errno = EINVAL;
return -1;
}
#endif
smbc_initialized = 1;
smbc_auth_fn = fn;
smbc_debug = debug;
@ -584,6 +644,7 @@ int smbc_open(const char *fname, int flags, mode_t mode)
if (!srv) {
if (errno == EPERM) errno = EACCES;
return -1; /* smbc_server sets errno */
}
@ -891,7 +952,7 @@ int smbc_unlink(const char *fname)
else {
if (IS_DOS_DIR(mode))
errno = EPERM;
errno = EISDIR;
else
errno = saverr; /* Restore this */