In vpopmail-5.5.0 (and I think all 5.4.x) there seems to be no way of removing an alias_line using valias, I've added this functionality. Patch attached.

!DSPAM:55f7e35241555071313485!
diff -uPr vpopmail-5.5.0.orig/valias.c vpopmail-5.5.0/valias.c
--- vpopmail-5.5.0.orig/valias.c        2010-11-05 18:37:22.000000000 +0000
+++ vpopmail-5.5.0/valias.c     2015-09-04 12:39:34.999094668 +0100
@@ -38,8 +38,9 @@
 
 #define VALIAS_SELECT 0
 #define VALIAS_INSERT 1
-#define VALIAS_DELETE 2
-#define VALIAS_NAMES  3
+#define VALIAS_REMOVE 2
+#define VALIAS_DELETE 3
+#define VALIAS_NAMES  4
 
 int AliasAction;
 int AliasExists;
@@ -119,6 +120,23 @@
                }
                break;
 
+       case VALIAS_REMOVE:
+               /* check to see if it already exists */
+               AliasExists = 0;
+               tmpalias = valias_select( Alias, Domain );
+               while (tmpalias != NULL ) {
+                       if (strcmp (tmpalias, AliasLine) == 0) AliasExists = 1;
+                       tmpalias = valias_select_next();
+               }
+               if (AliasExists) {
+                       valias_remove( Alias, Domain, AliasLine );
+               } else {
+                       fprintf (stderr, "Error: alias %s -> %s does not 
exist.\n",
+                               Email, AliasLine);
+                       vexit(-1);
+               }
+               break;
+
        case VALIAS_DELETE:
                valias_delete( Alias, Domain );
                break;
@@ -139,6 +157,7 @@
        printf("         -s ( show aliases, can use just domain )\n");
        printf("         -d ( delete alias )\n");
        printf("         -i alias_line (insert alias line)\n");
+       printf("         -r alias_line (remove alias line)\n");
        printf("\n");
        printf("Example: valias -i f...@inter7.com b...@inter7.com\n");
        printf("         (adds alias from b...@inter7.com to 
f...@inter7.com\n");
@@ -157,7 +176,7 @@
        memset(AliasLine, 0, sizeof(AliasLine));
        AliasAction = VALIAS_SELECT;
 
-       while( (c=getopt(argc,argv,"vnsdi:")) != -1 ) {
+       while( (c=getopt(argc,argv,"vnsr:di:")) != -1 ) {
                switch(c) {
                case 'v':
                        printf("version: %s\n", VERSION);
@@ -168,6 +187,10 @@
                case 's':
                        AliasAction = VALIAS_SELECT;
                        break;
+               case 'r':
+                       AliasAction = VALIAS_REMOVE;
+                       snprintf(AliasLine, sizeof(AliasLine), "%s", optarg);
+                       break;
                case 'd':
                        AliasAction = VALIAS_DELETE;
                        break;

Reply via email to