if ((afn=afn_getoneipnum(rmtip))==(AFNTYP *)0) {
(void) rou_alert(0,"%s Unable to get afn data for remote <%s> (WRONG IP?)",
OPEP,rmtip);
+ (void) sql_mngremote(scanref->sqlptr,sql_delete,rmtip,&srv);
phase=999; //Trouble trouble
}
break;
case -1 : //trouble to read socket data
switch(errno) {
case ENOTCONN : //other side just vanished
+ (void) rou_alert(0,"%s, Remote side vanished (local=%d, error=<%s>)",
+ OPEP,local,strerror(errno));
break;
default :
(void) rou_alert(0,"%s, Unable to socket data (local=%d, error=<%s>)",
- OPEP,local,strerror(errno));
+ OPEP,local,strerror(errno));
break;
}
break;
{0,(char *)0}
};
-_Bool isok;
/*
\f
*/
*usr=locusr;
return isok;
+#undef OPEP
+}
+/*
+\f
+*/
+/********************************************************/
+/* */
+/* Procedure to delete a remote record from the */
+/* table. */
+/* */
+/********************************************************/
+static _Bool delete_remote(SQLPTR *sqlptr,char *rmtip,SRVTYP *srv)
+
+{
+#define OPEP "gessql.c:delete_remote,"
+
+static const char *del="DELETE FROM "RMTTBL" WHERE remoteip=%s";
+
+_Bool isok;
+register int phase;
+register _Bool proceed;
+
+isok=false;
+phase=0;
+proceed=true;
+while (proceed==true) {
+ switch (phase) {
+ case 0 : //checking parameters
+ if (strlen(rmtip)==0) {
+ (void) rou_alert(0,"%s rmtip=<%s> sing (Bug?)",OPEP,rmtip);
+ phase=999;
+ }
+ break;
+ case 1 : //Selecting user
+ if (sql_request(sqlptr,del,rmtip)!=1) {
+ (void) rou_alert(0,"%s Unable to delete remote_ip <%s> (Database?)",
+ OPEP,rmtip);
+ phase=999; //Trouble trouble
+ }
+ break;
+ case 2 : //everything fine
+ isok=true;
+ break;
+ }
+ }
+return isok;
+
#undef OPEP
}
/*
static const char *sel="SELECT * FROM "RMTTBL" WHERE remoteip=%s";
+_Bool isok;
SRVTYP *locsrv;
SQLRES *rs;
register int phase;
switch (phase) {
case 0 : //checking parameters
if ((srv==(SRVTYP **)0)||(rmtip==(char *)0)||(strlen(rmtip)==0)) {
- (void) rou_alert(0,"%s srv=<%p> or rmtip=<%s> sing (Bug?)",OPEP,srv,rmtip);
+ (void) rou_alert(0,"%s srv=<%p> or rmtip=<%s> missing (Bug?)",
+ OPEP,srv,rmtip);
phase=999;
}
break;
case sql_update :
isok=update_remote(sqlptr,gooddata,*srv);
break;
+ case sql_delete :
+ isok=delete_remote(sqlptr,gooddata,*srv);
+ break;
default :
(void) rou_alert(0,"%s action='%d' not yet implemented!",OPEP,action);
break;
(void) rou_alert(0,"Contact from peer <%s> to port <%s> started",
contact->peerip,contact->locserv);
break;
- case 5 : //checking if remote IP is relayable
- if (afn_is_ip_relayable(contact->peerip,contact->relayok)==true)
- contact->privilege=rel_isrelay; //IP is relayable
- break;
- case 6 : //check contact validity
+ case 5 : //check contact validity
if ((contact->locname==(char *)0)||(contact->peerip==(char *)0)) {
(void) rou_alert(0,"%s Unable to establish contact entities",OPEP);
contact=freecontact(contact);
phase=999; //no identity
}
break;
+ case 6 : //checking if remote IP is relayable
+ if (afn_is_ip_relayable(contact->peerip,contact->relayok)==true)
+ contact->privilege=rel_isrelay; //IP is relayable
+ break;
case 7 : //contact is good, then sending a signon
(void) log_fprintlog(contact->logptr,true,"Start CNT=%s",contact->mainsesid);
(void) log_fprintlog(contact->logptr,false,"(Contact open from [%s] to "