upnpc.c: return error status when SetPinholeAndTest/RemovePinhole fail

fixes #740
This commit is contained in:
Thomas Bernard 2024-05-26 01:02:13 +02:00
parent d5abf2add8
commit 5fcf0c281f
No known key found for this signature in database
GPG Key ID: DB511043A31ACAAF
1 changed files with 15 additions and 8 deletions

View File

@ -403,7 +403,7 @@ static void GetFirewallStatus(struct UPNPUrls * urls, struct IGDdatas * data)
/* Test function /* Test function
* 1 - Add pinhole * 1 - Add pinhole
* 2 - Check if pinhole is working from the IGD side */ * 2 - Check if pinhole is working from the IGD side */
static void SetPinholeAndTest(struct UPNPUrls * urls, struct IGDdatas * data, static int SetPinholeAndTest(struct UPNPUrls * urls, struct IGDdatas * data,
const char * remoteaddr, const char * eport, const char * remoteaddr, const char * eport,
const char * intaddr, const char * iport, const char * intaddr, const char * iport,
const char * proto, const char * lease_time) const char * proto, const char * lease_time)
@ -416,7 +416,7 @@ static void SetPinholeAndTest(struct UPNPUrls * urls, struct IGDdatas * data,
if(!intaddr || !remoteaddr || !iport || !eport || !proto || !lease_time) if(!intaddr || !remoteaddr || !iport || !eport || !proto || !lease_time)
{ {
fprintf(stderr, "Wrong arguments\n"); fprintf(stderr, "Wrong arguments\n");
return; return -1;
} }
if(atoi(proto) == 0) if(atoi(proto) == 0)
{ {
@ -435,13 +435,16 @@ static void SetPinholeAndTest(struct UPNPUrls * urls, struct IGDdatas * data,
else else
{ {
fprintf(stderr, "invalid protocol\n"); fprintf(stderr, "invalid protocol\n");
return; return -1;
} }
} }
r = UPNP_AddPinhole(urls->controlURL_6FC, data->IPv6FC.servicetype, remoteaddr, eport, intaddr, iport, proto, lease_time, uniqueID); r = UPNP_AddPinhole(urls->controlURL_6FC, data->IPv6FC.servicetype, remoteaddr, eport, intaddr, iport, proto, lease_time, uniqueID);
if(r!=UPNPCOMMAND_SUCCESS) if(r!=UPNPCOMMAND_SUCCESS)
{
printf("AddPinhole([%s]:%s -> [%s]:%s) failed with code %d (%s)\n", printf("AddPinhole([%s]:%s -> [%s]:%s) failed with code %d (%s)\n",
remoteaddr, eport, intaddr, iport, r, strupnperror(r)); remoteaddr, eport, intaddr, iport, r, strupnperror(r));
return -2;
}
else else
{ {
printf("AddPinhole: ([%s]:%s -> [%s]:%s) / Pinhole ID = %s\n", printf("AddPinhole: ([%s]:%s -> [%s]:%s) / Pinhole ID = %s\n",
@ -451,6 +454,7 @@ static void SetPinholeAndTest(struct UPNPUrls * urls, struct IGDdatas * data,
printf("CheckPinholeWorking() failed with code %d (%s)\n", r, strupnperror(r)); printf("CheckPinholeWorking() failed with code %d (%s)\n", r, strupnperror(r));
printf("CheckPinholeWorking: Pinhole ID = %s / IsWorking = %s\n", uniqueID, (isWorking)? "Yes":"No");*/ printf("CheckPinholeWorking: Pinhole ID = %s / IsWorking = %s\n", uniqueID, (isWorking)? "Yes":"No");*/
} }
return 0;
} }
/* Test function /* Test function
@ -548,7 +552,7 @@ CheckPinhole(struct UPNPUrls * urls,
printf("CheckPinholeWorking: Pinhole ID = %s / IsWorking = %s\n", uniqueID, (isWorking)? "Yes":"No"); printf("CheckPinholeWorking: Pinhole ID = %s / IsWorking = %s\n", uniqueID, (isWorking)? "Yes":"No");
} }
static void static int
RemovePinhole(struct UPNPUrls * urls, RemovePinhole(struct UPNPUrls * urls,
struct IGDdatas * data, const char * uniqueID) struct IGDdatas * data, const char * uniqueID)
{ {
@ -556,10 +560,11 @@ RemovePinhole(struct UPNPUrls * urls,
if(!uniqueID) if(!uniqueID)
{ {
fprintf(stderr, "invalid arguments\n"); fprintf(stderr, "invalid arguments\n");
return; return -1;
} }
r = UPNP_DeletePinhole(urls->controlURL_6FC, data->IPv6FC.servicetype, uniqueID); r = UPNP_DeletePinhole(urls->controlURL_6FC, data->IPv6FC.servicetype, uniqueID);
printf("UPNP_DeletePinhole() returned : %d\n", r); printf("UPNP_DeletePinhole() returned : %d\n", r);
return r;
} }
static void usage(FILE * out, const char * argv0) { static void usage(FILE * out, const char * argv0) {
@ -863,10 +868,11 @@ int main(int argc, char ** argv)
} }
break; break;
case 'A': case 'A':
SetPinholeAndTest(&urls, &data, if (SetPinholeAndTest(&urls, &data,
commandargv[0], commandargv[1], commandargv[0], commandargv[1],
commandargv[2], commandargv[3], commandargv[2], commandargv[3],
commandargv[4], commandargv[5]); commandargv[4], commandargv[5]) < 0)
retcode = 2;
break; break;
case 'U': case 'U':
GetPinholeAndUpdate(&urls, &data, GetPinholeAndUpdate(&urls, &data,
@ -887,7 +893,8 @@ int main(int argc, char ** argv)
case 'D': case 'D':
for(i=0; i<commandargc; i++) for(i=0; i<commandargc; i++)
{ {
RemovePinhole(&urls, &data, commandargv[i]); if (RemovePinhole(&urls, &data, commandargv[i]) < 0)
retcode = 2;
} }
break; break;
case 'S': case 'S':