]> git.ipfire.org Git - thirdparty/squid.git/blobdiff - helpers/basic_auth/SMB/basic_smb_auth.cc
SourceFormat Enforcement
[thirdparty/squid.git] / helpers / basic_auth / SMB / basic_smb_auth.cc
index 2e715112c0717a9aa7c3c48b17c0190ba6aa12df..4f29137239209bc91d099e87ac6884037502b0a3 100644 (file)
@@ -1,3 +1,11 @@
+/*
+ * Copyright (C) 1996-2015 The Squid Software Foundation and contributors
+ *
+ * Squid software is distributed under GPLv2+ license and includes
+ * contributions from numerous individuals and organizations.
+ * Please see the COPYING and CONTRIBUTORS files for details.
+ */
+
 /*
  *  basic_smb_auth - SMB proxy authentication module
  *  Copyright (C) 1998  Richard Huveneers <richard@hekkihek.hacom.nl>
  *
  *  You should have received a copy of the GNU General Public License
  *  along with this program; if not, write to the Free Software
- * SQUID Web Proxy Cache          http://www.squid-cache.org/
- * ----------------------------------------------------------
- *
- *  Squid is the result of efforts by numerous individuals from
- *  the Internet community; see the CONTRIBUTORS file for full
- *  details.   Many organizations have provided support for Squid's
- *  development; see the SPONSORS file for full details.  Squid is
- *  Copyrighted (C) 2001 by the Regents of the University of
- *  California; see the COPYRIGHT file for full details.  Squid
- *  incorporates software developed and/or copyrighted by other
- *  sources; see the CREDITS file for full details.
- *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
  */
+
 #include "squid.h"
 #include "helpers/defines.h"
 #include "rfc1738.h"
 #include "util.h"
 
-#if HAVE_STDIO_H
-#include <stdio.h>
-#endif
-#if HAVE_STRING_H
-#include <string.h>
-#endif
+#include <cstring>
 
-
-#define NMB_UNICAST            1
-#define NMB_BROADCAST  2
+#define NMB_UNICAST     1
+#define NMB_BROADCAST   2
 
 struct SMBDOMAIN {
-    const char *name;          /* domain name */
-    const char *sname;         /* match this with user input */
-    const char *passthrough;   /* pass-through authentication */
-    const char *nmbaddr;       /* name service address */
-    int nmbcast;               /* broadcast or unicast */
-    char *authshare;           /* share name of auth file */
-    const char *authfile;      /* pathname of auth file */
-    struct SMBDOMAIN *next;    /* linked list */
+    const char *name;       /* domain name */
+    const char *sname;      /* match this with user input */
+    const char *passthrough;    /* pass-through authentication */
+    const char *nmbaddr;    /* name service address */
+    int nmbcast;        /* broadcast or unicast */
+    char *authshare;        /* share name of auth file */
+    const char *authfile;   /* pathname of auth file */
+    struct SMBDOMAIN *next; /* linked list */
 };
 
 struct SMBDOMAIN *firstdom = NULL;
@@ -82,8 +60,12 @@ print_esc(FILE * p, char *s)
     char *t;
     int i = 0;
 
-    for (t = s; *t != '\0'; t++) {
-        if (i > HELPER_INPUT_BUFFER-2) {
+    for (t = s; *t != '\0'; ++t) {
+        /*
+         * NP: The shell escaping permits 'i' to jump up to 2 octets per loop,
+         *     so ensure we have at least 3 free.
+         */
+        if (i > HELPER_INPUT_BUFFER-3) {
             buf[i] = '\0';
             (void) fputs(buf, p);
             i = 0;
@@ -91,7 +73,8 @@ print_esc(FILE * p, char *s)
         if (*t == '\\')
             buf[i++] = '\\';
 
-        buf[i++] = *t;
+        buf[i] = *t;
+        ++i;
     }
 
     if (i > 0) {
@@ -118,7 +101,7 @@ main(int argc, char *argv[])
         return 1;
 
     /* parse command line arguments */
-    for (i = 1; i < argc; i++) {
+    for (i = 1; i < argc; ++i) {
         if (strcmp(argv[i], "-d") == 0) {
             debug_enabled = 1;
             continue;
@@ -178,13 +161,13 @@ main(int argc, char *argv[])
                     return 1;
 
                 /* convert backslashes to forward slashes */
-                for (s = lastdom->authshare; *s != '\0'; s++)
+                for (s = lastdom->authshare; *s != '\0'; ++s)
                     if (*s == '\\')
                         *s = '/';
 
                 /* strip leading forward slash from share name */
                 if (*lastdom->authshare == '/')
-                    lastdom->authshare++;
+                    ++lastdom->authshare;
 
                 if ((s = strchr(lastdom->authshare, '/')) != NULL) {
                     *s = '\0';
@@ -253,6 +236,7 @@ main(int argc, char *argv[])
             SEND_OK("");
         else
             SEND_ERR("");
-    }                          /* while (1) */
+    }               /* while (1) */
     return 0;
 }
+