diff mbox

[linux-cifs-client] cifs: move security option parsing to own function

Message ID 1274921132-21335-1-git-send-email-scott.lovenberg@gmail.com (mailing list archive)
State New, archived
Headers show

Commit Message

Scott Lovenberg May 27, 2010, 12:45 a.m. UTC
None
diff mbox

Patch

diff --git a/fs/cifs/connect.c b/fs/cifs/connect.c
index ee78b65..bf7e40c 100644
--- a/fs/cifs/connect.c
+++ b/fs/cifs/connect.c
@@ -972,6 +972,61 @@  extract_hostname(const char *unc)
 }
 
 static int
+cifs_parse_sec_option(char *value, struct smb_vol *vol)
+{
+	substring_t args[MAX_OPT_ARGS];
+	switch (match_token(value, cifs_sec_options, args)) {
+	case Opt_sec_krb5i:
+		vol->secFlg |= CIFSSEC_MAY_KRB5 | CIFSSEC_MUST_SIGN;
+		break;
+	case Opt_sec_krb5p:
+		/* vol->secFlg |= CIFSSEC_MUST_SEAL | CIFSSEC_MAY_KRB5; */
+		cERROR(1, "Krb5 cifs privacy not supported");
+		return 1;
+	case Opt_sec_krb5:
+		vol->secFlg |= CIFSSEC_MAY_KRB5;
+		break;
+#ifdef CONFIG_CIFS_EXPERIMENTAL
+	case Opt_sec_ntlmsspi:
+		vol->secFlg |= CIFSSEC_MAY_NTLMSSP | CIFSSEC_MUST_SIGN;
+		break;
+	case Opt_sec_ntlmssp:
+		vol->secFlg |= CIFSSEC_MAY_NTLMSSP;
+		break;
+#endif
+	case Opt_sec_ntlmv2i:
+		vol->secFlg |= CIFSSEC_MAY_NTLMV2 | CIFSSEC_MUST_SIGN;
+		break;
+	case Opt_sec_ntlmv2:
+		vol->secFlg |= CIFSSEC_MAY_NTLMV2;
+		break;
+	case Opt_sec_ntlmi:
+		vol->secFlg |= CIFSSEC_MAY_NTLM | CIFSSEC_MUST_SIGN;
+		break;
+	case Opt_sec_ntlm:
+		/* ntlm is default so can be turned off too */
+		vol->secFlg |= CIFSSEC_MAY_NTLM;
+		break;
+	case Opt_sec_nontlm:
+		/* BB is there a better way to do this? */
+		vol->secFlg |= CIFSSEC_MAY_NTLMV2;
+		break;
+#ifdef CONFIG_CIFS_WEAK_PW_HASH
+	case Opt_sec_lanman:
+		vol->secFlg |= CIFSSEC_MAY_LANMAN;
+		break;
+#endif
+	case Opt_sec_none:
+		vol->nullauth = 1;
+		break;
+	default:
+		cERROR(1, "bad security option: %s", value);
+		return 1;
+	}
+	return 0;
+}
+
+static int
 cifs_parse_mount_options(char *options, const char *devname,
 			 struct smb_vol *vol)
 {
@@ -1158,59 +1213,9 @@  cifs_parse_mount_options(char *options, const char *devname,
 				cERROR(1, "no security value specified");
 				continue;
 			}
-			switch (match_token(value, cifs_sec_options, args)) {
-			case Opt_sec_krb5i:
-				vol->secFlg |= CIFSSEC_MAY_KRB5 |
-					CIFSSEC_MUST_SIGN;
-				break;
-			case Opt_sec_krb5p:
-				/* vol->secFlg |= CIFSSEC_MUST_SEAL |
-					CIFSSEC_MAY_KRB5; */
-				cERROR(1, "Krb5 cifs privacy not supported");
-				return 1;
-			case Opt_sec_krb5:
-				vol->secFlg |= CIFSSEC_MAY_KRB5;
-				break;
-#ifdef CONFIG_CIFS_EXPERIMENTAL
-			case Opt_sec_ntlmsspi:
-				vol->secFlg |= CIFSSEC_MAY_NTLMSSP |
-					CIFSSEC_MUST_SIGN;
-				break;
-			case Opt_sec_ntlmssp:
-				vol->secFlg |= CIFSSEC_MAY_NTLMSSP;
-				break;
-#endif
-			case Opt_sec_ntlmv2i:
-				vol->secFlg |= CIFSSEC_MAY_NTLMV2 |
-					CIFSSEC_MUST_SIGN;
-				break;
-			case Opt_sec_ntlmv2:
-				vol->secFlg |= CIFSSEC_MAY_NTLMV2;
-				break;
-			case Opt_sec_ntlmi:
-				vol->secFlg |= CIFSSEC_MAY_NTLM |
-					CIFSSEC_MUST_SIGN;
-				break;
-			case Opt_sec_ntlm:
-				/* ntlm is default so can be turned off too */
-				vol->secFlg |= CIFSSEC_MAY_NTLM;
-				break;
-			case Opt_sec_nontlm:
-				/* BB is there a better way to do this? */
-				vol->secFlg |= CIFSSEC_MAY_NTLMV2;
-				break;
-#ifdef CONFIG_CIFS_WEAK_PW_HASH
-			case Opt_sec_lanman:
-				vol->secFlg |= CIFSSEC_MAY_LANMAN;
-				break;
-#endif
-			case Opt_sec_none:
-				vol->nullauth = 1;
-				break;
-			default:
-				cERROR(1, "bad security option: %s", value);
-				return 1;
-			}
+			i = cifs_parse_sec_option(value, vol);
+			if (i)
+				return i;
 			break;
 		/* unc || target || path */
 		case Opt_unc: