]> git.ipfire.org Git - thirdparty/lldpd.git/commitdiff
lldpd: abort when some options are repeated
authorVincent Bernat <vincent@bernat.im>
Tue, 30 Sep 2014 19:32:44 +0000 (21:32 +0200)
committerVincent Bernat <vincent@bernat.im>
Tue, 30 Sep 2014 19:33:49 +0000 (21:33 +0200)
Some options don't have to be repeated. Later options would override
earlier and this is usually an error. Better just abort in this case.

NEWS
src/daemon/lldpd.c

diff --git a/NEWS b/NEWS
index 88633e60c8ae7cff3f7505b457f30ef9b245951b..e8a9008be6ba03c5e3be16db0c330fe6a909e9e0 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,6 +1,7 @@
 lldpd (0.7.11)
   * Features:
     + Ship bash and zsh completion.
+    + Abort when some command-line options are repeated.
   * Fix:
     + Handle correctly read failures in liblldpctl.
 
index d4d83189489053a709aeed81c53cc3f74ee2f959..33a85a3eccb0f922d29beee873efece26a75177d 100644 (file)
@@ -1339,15 +1339,31 @@ lldpd_main(int argc, char *argv[], char *envp[])
                        receiveonly = 1;
                        break;
                case 'm':
+                       if (mgmtp) {
+                               fprintf(stderr, "-m can only be used once\n");
+                               usage();
+                       }
                        mgmtp = optarg;
                        break;
                case 'u':
+                       if (ctlname) {
+                               fprintf(stderr, "-u can only be used once\n");
+                               usage();
+                       }
                        ctlname = optarg;
                        break;
                case 'I':
+                       if (interfaces) {
+                               fprintf(stderr, "-I can only be used once\n");
+                               usage();
+                       }
                        interfaces = optarg;
                        break;
                case 'C':
+                       if (cidp) {
+                               fprintf(stderr, "-C can only be used once\n");
+                               usage();
+                       }
                        cidp = optarg;
                        break;
                case 'L':
@@ -1380,6 +1396,10 @@ lldpd_main(int argc, char *argv[], char *envp[])
                        snmp = 1;
                        break;
                case 'X':
+                       if (agentx) {
+                               fprintf(stderr, "-X can only be used once\n");
+                               usage();
+                       }
                        snmp = 1;
                        agentx = optarg;
                        break;
@@ -1391,11 +1411,17 @@ lldpd_main(int argc, char *argv[], char *envp[])
 #endif
                        break;
                 case 'S':
-                       free(descr_override);
+                       if (descr_override) {
+                               fprintf(stderr, "-S can only be used once\n");
+                               usage();
+                       }
                         descr_override = strdup(optarg);
                         break;
                case 'P':
-                       free(platform_override);
+                       if (platform_override) {
+                               fprintf(stderr, "-P can only be used once\n");
+                               usage();
+                       }
                        platform_override = strdup(optarg);
                        break;
                case 'H':