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;