aboutsummaryrefslogtreecommitdiffstats
path: root/fs/cifs/connect.c
diff options
context:
space:
mode:
authorJeff Layton <jlayton@redhat.com>2012-01-17 16:09:15 -0500
committerSteve French <smfrench@gmail.com>2012-01-17 23:40:26 -0500
commit04febabcf55beeffb8794a0d8c539e571bd2ae29 (patch)
tree8727fdf5c811bab3d164293488cd5e1a3816276c /fs/cifs/connect.c
parent9f6ed2ca257fa8650b876377833e6f14e272848b (diff)
cifs: sanitize username handling
Currently, it's not very clear whether you're allowed to have a NULL vol->username or ses->user_name. Some places check for it and some don't. Make it clear that a NULL pointer is OK in these fields, and ensure that all the callers check for that. Signed-off-by: Jeff Layton <jlayton@redhat.com> Signed-off-by: Steve French <smfrench@gmail.com>
Diffstat (limited to 'fs/cifs/connect.c')
-rw-r--r--fs/cifs/connect.c19
1 files changed, 12 insertions, 7 deletions
diff --git a/fs/cifs/connect.c b/fs/cifs/connect.c
index a66dcb52988c..b952a21e917b 100644
--- a/fs/cifs/connect.c
+++ b/fs/cifs/connect.c
@@ -1997,10 +1997,16 @@ static int match_session(struct cifs_ses *ses, struct smb_vol *vol)
1997 return 0; 1997 return 0;
1998 break; 1998 break;
1999 default: 1999 default:
2000 /* NULL username means anonymous session */
2001 if (ses->user_name == NULL) {
2002 if (!vol->nullauth)
2003 return 0;
2004 break;
2005 }
2006
2000 /* anything else takes username/password */ 2007 /* anything else takes username/password */
2001 if (ses->user_name == NULL) 2008 if (strncmp(ses->user_name,
2002 return 0; 2009 vol->username ? vol->username : "",
2003 if (strncmp(ses->user_name, vol->username,
2004 MAX_USERNAME_SIZE)) 2010 MAX_USERNAME_SIZE))
2005 return 0; 2011 return 0;
2006 if (strlen(vol->username) != 0 && 2012 if (strlen(vol->username) != 0 &&
@@ -3167,10 +3173,9 @@ cifs_setup_volume_info(struct smb_vol *volume_info, char *mount_data,
3167 return -EINVAL; 3173 return -EINVAL;
3168 3174
3169 if (volume_info->nullauth) { 3175 if (volume_info->nullauth) {
3170 cFYI(1, "null user"); 3176 cFYI(1, "Anonymous login");
3171 volume_info->username = kzalloc(1, GFP_KERNEL); 3177 kfree(volume_info->username);
3172 if (volume_info->username == NULL) 3178 volume_info->username = NULL;
3173 return -ENOMEM;
3174 } else if (volume_info->username) { 3179 } else if (volume_info->username) {
3175 /* BB fixme parse for domain name here */ 3180 /* BB fixme parse for domain name here */
3176 cFYI(1, "Username: %s", volume_info->username); 3181 cFYI(1, "Username: %s", volume_info->username);