Whamcloud - gitweb
LU-6245 libcfs: replace IS_PO2 with is_power_of_2 in server code
[fs/lustre-release.git] / lustre / utils / gss / svcgssd.c
index 51aabf2..0ed4f4c 100644 (file)
@@ -1,41 +1,41 @@
 /*
-  gssd.c
-
-  Copyright (c) 2000 The Regents of the University of Michigan.
-  All rights reserved.
-
-  Copyright (c) 2000 Dug Song <dugsong@UMICH.EDU>.
-  Copyright (c) 2002 Andy Adamson <andros@UMICH.EDU>.
-  Copyright (c) 2002 Marius Aamodt Eriksen <marius@UMICH.EDU>.
-  Copyright (c) 2002 J. Bruce Fields <bfields@UMICH.EDU>.
-  All rights reserved, all wrongs reversed.
-
-  Redistribution and use in source and binary forms, with or without
-  modification, are permitted provided that the following conditions
-  are met:
-
-  1. Redistributions of source code must retain the above copyright
-     notice, this list of conditions and the following disclaimer.
-  2. Redistributions in binary form must reproduce the above copyright
-     notice, this list of conditions and the following disclaimer in the
-     documentation and/or other materials provided with the distribution.
-  3. Neither the name of the University nor the names of its
-     contributors may be used to endorse or promote products derived
-     from this software without specific prior written permission.
-
-  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
-  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
-  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-  BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-  LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-*/
* gssd.c
+ *
* Copyright (c) 2000 The Regents of the University of Michigan.
* All rights reserved.
+ *
* Copyright (c) 2000 Dug Song <dugsong@UMICH.EDU>.
* Copyright (c) 2002 Andy Adamson <andros@UMICH.EDU>.
* Copyright (c) 2002 Marius Aamodt Eriksen <marius@UMICH.EDU>.
* Copyright (c) 2002 J. Bruce Fields <bfields@UMICH.EDU>.
+ *
+ * All rights reserved, all wrongs reversed.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the University nor the names of its
+ *    contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
 
 #include "config.h"
 
@@ -58,6 +58,7 @@
 #include "gss_util.h"
 #include "err_util.h"
 #include "lsupport.h"
+#include "lustre_ver.h"
 
 int null_enabled;
 int krb_enabled;
@@ -191,10 +192,12 @@ usage(FILE *fp, char *progname)
        fprintf(stderr, "-o      - Service OSS\n");
        fprintf(stderr, "-g      - Service MGS\n");
        fprintf(stderr, "-k      - Enable kerberos support\n");
-       fprintf(stderr, "-s      - Enable shared key support\n");
+#ifdef HAVE_OPENSSL_SSK
+       fprintf(stderr, "-s      - Enable shared secret key support\n");
+#endif
        fprintf(stderr, "-z      - Enable gssnull support\n");
 
-       exit(1);
+       exit(fp == stderr);
 }
 
 int
@@ -237,7 +240,13 @@ main(int argc, char *argv[])
                        usage(stdout, argv[0]);
                        break;
                case 's':
+#ifdef HAVE_OPENSSL_SSK
                        sk_enabled = 1;
+#else
+                       fprintf(stderr, "error: request for SSK but service "
+                               "support not enabled\n");
+                       usage(stderr, argv[0]);
+#endif
                        break;
                case 'z':
                        null_enabled = 1;
@@ -253,10 +262,25 @@ main(int argc, char *argv[])
        else
                progname = argv[0];
 
+       if (!sk_enabled && !krb_enabled && !null_enabled) {
+#if LUSTRE_VERSION_CODE < OBD_OCD_VERSION(3, 0, 53, 0)
+               fprintf(stderr, "warning: no -k, -s, or -z option given, "
+                       "assume -k for backward compatibility\n");
+               krb_enabled = 1;
+#else
+               fprintf(stderr, "error: need one of -k, -s, or -z options\n");
+               usage(stderr, argv[0]);
+
+#endif
+       }
        initerr(progname, verbosity, fg);
 
        /* For kerberos use gss mechanisms but ignore for sk and null */
-       if (krb_enabled && gssd_check_mechs() == 0) {
+       if (krb_enabled) {
+               if (gssd_check_mechs()) {
+                       printerr(0, "ERROR: problem with gssapi library\n");
+                       exit(1);
+               }
                if (gssd_get_local_realm()) {
                        printerr(0, "ERROR: Can't get Local Kerberos realm\n");
                        exit(1);