diff options
author | Steve French <sfrench@samba.org> | 2005-04-28 22:28:11 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 10:56:44 -0500 |
commit | ed27740397817c1f1b14ba187139c877dbf22168 (patch) | |
tree | 077709b247507aba71333c13f6cda301e639d60e /source/client | |
parent | 37685979bb4075a42018b89f3aee230fead5a7a4 (diff) | |
download | samba-ed27740397817c1f1b14ba187139c877dbf22168.tar.gz samba-ed27740397817c1f1b14ba187139c877dbf22168.tar.xz samba-ed27740397817c1f1b14ba187139c877dbf22168.zip |
r6514: Allow domain= to be specified in credentials file. Fix umount.cifs help, allow root to unmount someone
else's mount
Diffstat (limited to 'source/client')
-rwxr-xr-x | source/client/mount.cifs.c | 38 | ||||
-rw-r--r-- | source/client/umount.cifs.c | 8 |
2 files changed, 40 insertions, 6 deletions
diff --git a/source/client/mount.cifs.c b/source/client/mount.cifs.c index 7ac4291f17d..9c0f582d85f 100755 --- a/source/client/mount.cifs.c +++ b/source/client/mount.cifs.c @@ -39,7 +39,7 @@ #include <fcntl.h> #define MOUNT_CIFS_VERSION_MAJOR "1" -#define MOUNT_CIFS_VERSION_MINOR "7" +#define MOUNT_CIFS_VERSION_MINOR "8" #ifndef MOUNT_CIFS_VENDOR_SUFFIX #define MOUNT_CIFS_VENDOR_SUFFIX "" @@ -185,13 +185,41 @@ static int open_cred_file(char * file_name) } else memset(mountpassword,0,64); if(mountpassword) { - /* BB add handling for commas in password here */ strncpy(mountpassword,temp_val,length); got_password = 1; } } } - } + } else if (strncasecmp("domain",line_buf+i,6) == 0) { + temp_val = strchr(line_buf+i,'='); + if(temp_val) { + /* go past equals sign */ + temp_val++; + if(verboseflag) + printf("\nDomain %s\n",temp_val); + for(length = 0;length<65;length++) { + if(temp_val[length] == '\n') + break; + } + if(length > 64) { + printf("mount.cifs failed: domain in credentials file too long\n"); + if(mountpassword) { + memset(mountpassword,0,64); + } + exit(1); + } else { + if(domain_name == NULL) { + domain_name = calloc(65,1); + } else + memset(domain_name,0,64); + if(domain_name) { + strncpy(domain_name,temp_val,length); + got_domain = 1; + } + } + } + } + } fclose(fs); if(line_buf) { @@ -888,6 +916,7 @@ int main(int argc, char ** argv) break; case 'd': domain_name = optarg; /* BB fix this - currently ignored */ + got_domain = 1; break; case 'p': if(mountpassword == NULL) @@ -1017,7 +1046,8 @@ mount_retry: if(user_name) { /* check for syntax like user=domain\user */ - domain_name = check_for_domain(&user_name); + if(got_domain == 0) + domain_name = check_for_domain(&user_name); strncat(options,",user=",6); strcat(options,user_name); } diff --git a/source/client/umount.cifs.c b/source/client/umount.cifs.c index 02ed2caba40..88a9776b048 100644 --- a/source/client/umount.cifs.c +++ b/source/client/umount.cifs.c @@ -37,7 +37,7 @@ #include <fstab.h> #define UNMOUNT_CIFS_VERSION_MAJOR "0" -#define UNMOUNT_CIFS_VERSION_MINOR "3" +#define UNMOUNT_CIFS_VERSION_MINOR "4" #ifndef UNMOUNT_CIFS_VENDOR_SUFFIX #define UNMOUNT_CIFS_VENDOR_SUFFIX "" @@ -93,6 +93,7 @@ static void umount_cifs_usage(void) printf("\n\tman 8 umount.cifs\n"); printf("\nTo display the version number of the cifs umount utility:"); printf("\n\t%s -V\n",thisprogram); + printf("\nNote that invoking the umount utility on cifs mounts, can execute /sbin/umount.cifs (if it is present and -i is not specified to umount).\n"); } static int umount_check_perm(char * dir) @@ -100,8 +101,11 @@ static int umount_check_perm(char * dir) int fileid; int rc; - /* presumably can not chdir into the target as we do on mount */ + /* allow root to unmount, no matter what */ + if(getuid() == 0) + return 0; + /* presumably can not chdir into the target as we do on mount */ fileid = open(dir, O_RDONLY | O_DIRECTORY | O_NOFOLLOW, 0); if(fileid == -1) { if(verboseflg) |