Hi,
here are patches for im3195 and liblogging to pass through the IP
address and hostname of the sender.
Please tell me if it needs to be improved.
Regards,
Martin Körper
--- rsyslog-v7-stable_orig/plugins/im3195/im3195.c 2013-01-10 11:51:46.249599137 +0100
+++ rsyslog-v7-stable/plugins/im3195/im3195.c 2013-01-10 12:24:14.898262311 +0100
@@ -49,6 +49,7 @@
#include "msg.h"
#include "errmsg.h"
#include "unicode-helper.h"
+#include "glbl.h"
MODULE_TYPE_INPUT
MODULE_TYPE_NOKEEP
@@ -58,6 +59,7 @@ MODULE_CNFNAME("im3195")
DEF_IMOD_STATIC_DATA
DEFobjCurrIf(errmsg)
DEFobjCurrIf(prop)
+DEFobjCurrIf(glbl)
/* configuration settings */
@@ -88,11 +90,17 @@ static prop_t *pInputName = NULL;
void OnReceive(srAPIObj __attribute__((unused)) *pMyAPI, srSLMGObj* pSLMG)
{
uchar *pszRawMsg;
- uchar *fromHost = (uchar*) "[unset]"; /* TODO: get hostname */
- uchar *fromHostIP = (uchar*) "[unset]"; /* TODO: get hostname */
+ uchar *fromHost = NULL;
+ uchar *fromHostIP = NULL;
srSLMGGetRawMSG(pSLMG, &pszRawMsg);
-
+ srSLMGGetRemoteHost(pSLMG, &fromHostIP);
+ srSLMGGetRemoteHostName(pSLMG, &fromHost);
+ if(fromHost == NULL)
+ fromHost = (uchar*) "[unset]";
+ if(fromHostIP == NULL)
+ fromHostIP = (uchar*) "[unset]";
+
parseAndSubmitMessage(fromHost, fromHostIP, pszRawMsg, strlen((char*)pszRawMsg),
PARSE_HOSTNAME, eFLOWCTL_FULL_DELAY, pInputName, NULL, 0, NULL);
}
@@ -155,6 +163,13 @@ CODESTARTwillRun
errmsg.LogError(0, NO_ERRCODE, "error %d setting liblogging listen port - im3195 is defunct", iRet);
FINALIZE;
}
+
+ if (!glbl.GetDisableDNS()) {
+ if((iRet = srAPISetOption(pAPI, srOPTION_USE_DNS, 1)) != SR_RET_OK) {
+ errmsg.LogError(0, NO_ERRCODE, "error %d setting up liblogging listener - im3195 is defunct", iRet);
+ FINALIZE;
+ }
+ }
if((iRet = srAPISetupListener(pAPI, OnReceive)) != SR_RET_OK) {
errmsg.LogError(0, NO_ERRCODE, "error %d setting up liblogging listener - im3195 is defunct", iRet);
@@ -181,6 +196,7 @@ CODESTARTmodExit
/* release objects we used */
objRelease(errmsg, CORE_COMPONENT);
objRelease(prop, CORE_COMPONENT);
+ objRelease(glbl, CORE_COMPONENT);
ENDmodExit
@@ -202,6 +218,7 @@ CODESTARTmodInit
CODEmodInit_QueryRegCFSLineHdlr
CHKiRet(objUse(errmsg, CORE_COMPONENT));
CHKiRet(objUse(prop, CORE_COMPONENT));
+ CHKiRet(objUse(glbl, CORE_COMPONENT));
CHKiRet(omsdRegCFSLineHdlr((uchar *)"input3195listenport", 0, eCmdHdlrInt, NULL, &listenPort, STD_LOADABLE_MODULE_ID));
CHKiRet(omsdRegCFSLineHdlr((uchar *)"resetconfigvariables", 1, eCmdHdlrCustomHandler, resetConfigVariables, NULL, STD_LOADABLE_MODULE_ID));
diff --git a/src/liblogging.h b/src/liblogging.h
index 2b31203..79c5845 100644
--- a/src/liblogging.h
+++ b/src/liblogging.h
@@ -276,7 +276,11 @@ enum srOPTION
* Sets the BEEP listener port. Is only used if the
* UDP listener is activated.
*/
- srOPTION_BEEP_LISTENPORT = 8
+ srOPTION_BEEP_LISTENPORT = 8,
+ /**
+ * Use DNS for hostname lookup?
+ */
+ srOPTION_USE_DNS = 9
};
typedef enum srOPTION SRoption;
diff --git a/src/lstnprof-3195cooked.c b/src/lstnprof-3195cooked.c
index 8dcf4fc..d4cff4b 100644
--- a/src/lstnprof-3195cooked.c
+++ b/src/lstnprof-3195cooked.c
@@ -101,6 +101,7 @@ static srRetVal psrcOnMesgRecvDoEntry(sbProfObj *pThis, int* pbAbort, sbSessObj*
srRetVal iRet;
srSLMGObj *pSLMG;
char *pszRemHostIP;
+ char *pszRemHostName = NULL;
sbProfCHECKVALIDOBJECT(pThis);
sbSessCHECKVALIDOBJECT(pSess);
@@ -133,14 +134,29 @@ static srRetVal psrcOnMesgRecvDoEntry(sbProfObj *pThis, int* pbAbort, sbSessObj*
free(pszRemHostIP);
return iRet;
}
+ if((iRet = sbSockGetRemoteHostName(pSess->pSock, &pszRemHostName, pThis->pAPI->bUseDNS)) != SR_RET_OK)
+ {
+ srSLMGDestroy(pSLMG);
+ free(pszRemHostIP);
+ return iRet;
+ }
+ if((iRet = srSLMGSetRemoteHostName(pSLMG, pszRemHostName, FALSE)) != SR_RET_OK)
+ {
+ srSLMGDestroy(pSLMG);
+ free(pszRemHostIP);
+ free(pszRemHostName);
+ return iRet;
+ }
if((iRet = srSLMGParseMesg(pSLMG)) != SR_RET_OK)
{
srSLMGDestroy(pSLMG);
free(pszRemHostIP);
+ free(pszRemHostName);
return iRet;
}
pThis->pAPI->OnSyslogMessageRcvd(pThis->pAPI, pSLMG);
free(pszRemHostIP);
+ free(pszRemHostName);
srSLMGDestroy(pSLMG);
return SR_RET_OK;
diff --git a/src/lstnprof-3195raw.c b/src/lstnprof-3195raw.c
index 595b312..ca4cf92 100644
--- a/src/lstnprof-3195raw.c
+++ b/src/lstnprof-3195raw.c
@@ -95,6 +95,7 @@ static srRetVal psrrOnMesgRecvCallAPI(sbProfObj *pThis, int* pbAbort, sbSessObj*
char *pBuf;
char *pszMsg;
char *pszRemHostIP;
+ char *pszRemHostName = NULL;
srSLMGObj *pSLMG;
sbProfCHECKVALIDOBJECT(pThis);
@@ -159,16 +160,33 @@ static srRetVal psrrOnMesgRecvCallAPI(sbProfObj *pThis, int* pbAbort, sbSessObj*
free(pszMsg);
return iRet;
}
+ if((iRet = sbSockGetRemoteHostName(pSess->pSock, &pszRemHostName, pThis->pAPI->bUseDNS)) != SR_RET_OK)
+ {
+ srSLMGDestroy(pSLMG);
+ free(pszRemHostIP);
+ free(pszMsg);
+ return iRet;
+ }
+ if((iRet = srSLMGSetRemoteHostName(pSLMG, pszRemHostName, FALSE)) != SR_RET_OK)
+ {
+ srSLMGDestroy(pSLMG);
+ free(pszRemHostIP);
+ free(pszMsg);
+ free(pszRemHostName);
+ return iRet;
+ }
if((iRet = srSLMGParseMesg(pSLMG)) != SR_RET_OK)
{
srSLMGDestroy(pSLMG);
free(pszRemHostIP);
free(pszMsg);
+ free(pszRemHostName);
return iRet;
}
pThis->pAPI->OnSyslogMessageRcvd(pThis->pAPI, pSLMG);
free(pszMsg);
free(pszRemHostIP);
+ free(pszRemHostName);
srSLMGDestroy(pSLMG);
}
return SR_RET_OK;
diff --git a/src/sockets.c b/src/sockets.c
index 28902e4..37afe35 100644
--- a/src/sockets.c
+++ b/src/sockets.c
@@ -114,6 +114,7 @@ srRetVal sbSockConstruct(sbSockObj** pThis)
(*pThis)->iCurInBufPos = 0;
(*pThis)->iInBufLen = 0;
(*pThis)->pRemoteHostIP = NULL;
+ (*pThis)->pRemoteHostName = NULL;
return SR_RET_OK;
}
@@ -185,6 +186,8 @@ srRetVal sbSockExit(struct sbSockObject *pThis)
if(pThis->pRemoteHostIP != NULL)
free(pThis->pRemoteHostIP);
+ if(pThis->pRemoteHostName != NULL)
+ free(pThis->pRemoteHostName);
SRFREEOBJ(pThis); /* there is nothing we can do if free() fails... */
return(iRetVal);
@@ -297,6 +300,42 @@ srRetVal sbSockGetRemoteHostIP(sbSockObj *pThis, char **ppszHost)
}
+srRetVal sbSockGetRemoteHostName(sbSockObj *pThis, char **ppszHostname, int bUseDNS)
+{
+ char *pBuf;
+ char *pBufRTL;
+ char *pBufIP;
+ srRetVal iRet;
+ int iLenBufRTL;
+ sbSockCHECKVALIDOBJECT(pThis);
+ assert(ppszHostname != NULL);
+
+ if(pThis->pRemoteHostName == NULL)
+ {
+ if(bUseDNS == TRUE)
+ {
+ /* need to obtain the string */
+ iRet = sbSock_getnameinfo(&(pThis->RemoteHostAddr), &pBufRTL);
+ }
+ if(bUseDNS == FALSE || iRet != SR_RET_OK)
+ {
+ /* use RemoteHostIP as RemoteHostName */
+ if((iRet = sbSockGetRemoteHostIP(pThis, &pBufRTL)) != SR_RET_OK)
+ return iRet;
+ }
+ pThis->iRemHostNameBufLen = (int) strlen(pBufRTL) + 1;
+ pThis->pRemoteHostName = pBufRTL;
+ }
+
+ if((pBuf = (char*) malloc(pThis->iRemHostNameBufLen * sizeof(char))) == NULL)
+ return SR_RET_OUT_OF_MEMORY;
+ memcpy(pBuf, pThis->pRemoteHostName, pThis->iRemHostNameBufLen);
+ *ppszHostname = pBuf;
+
+ return SR_RET_OK;
+}
+
+
srRetVal sbSockGetIPusedForSending(sbSockObj* pThis, char**ppsz)
{
srRetVal iRet;
diff --git a/src/sockets.h b/src/sockets.h
index 8e8c764..70a4535 100644
--- a/src/sockets.h
+++ b/src/sockets.h
@@ -89,6 +89,8 @@ struct sbSockObject
struct sockaddr_in RemoteHostAddr;/**< ipAddr of the remote host [sorry, IP V4 only currently... :-(] */
char *pRemoteHostIP; /**< IP address of the remote host connected to this socket */
int iRemHostIPBufLen; /**< strlen()+ 1 of the remote host IP address (for malloc()) */
+ char *pRemoteHostName; /**< reverse DNS from pszRemoteHost */
+ int iRemHostNameBufLen; /**< strlen()+ 1 of the remote hostname (for malloc()) */
# endif
};
typedef struct sbSockObject sbSockObj;
@@ -293,6 +295,26 @@ srRetVal sbSockSetNonblocking(sbSockObj*pThis);
srRetVal sbSockGetRemoteHostIP(sbSockObj *pThis, char **ppszHost);
/**
+ * Return the reverse DNS entry for the IP address,
+ * Returns the IP address if bUseDNS == FALSE.
+ * If the the hostname cannot be determined it returns the IP address.
+ */
+srRetVal sbSockGetRemoteHostName(sbSockObj *pThis, char **ppszHostname, int bUseDNS);
+
+/**
+ * Wrapper for getnameinfo().
+ *
+ * \param psa Poiner to a struct sockaddr for which hostname
+ * is to obtain. Must not be NULL.
+ *
+ * \param psz Pointer to Pointer to hostname. Must not be NULL.
+ * On return, this pointer will refer to a newly allocated
+ * buffer containing the hostname. This buffer must be free()ed
+ * by the caller!
+ */
+srRetVal sbSock_getnameinfo(struct sockaddr_in *psa, char **ppszHostname);
+
+/**
* Wrapper for gethostname().
*
* \param psz Pointer to Pointer to hostname. Must not be NULL.
diff --git a/src/socketsUnix.c b/src/socketsUnix.c
index c414d00..521865d 100644
--- a/src/socketsUnix.c
+++ b/src/socketsUnix.c
@@ -410,6 +410,34 @@ srRetVal sbSock_gethostname(char **psz)
}
+/**
+ * Wrapper for getnameinfo().
+ *
+ * \param psa Poiner to a struct sockaddr for which hostname
+ * is to obtain. Must not be NULL.
+ *
+ * \param psz Pointer to Pointer to hostname. Must not be NULL.
+ * On return, this pointer will refer to a newly allocated
+ * buffer containing the hostname. This buffer must be free()ed
+ * by the caller!
+ */
+srRetVal sbSock_getnameinfo(struct sockaddr_in *psa, char **psz)
+{
+ int iRet=0;
+ assert(psz != NULL);
+
+ if((*psz = (char*) malloc(NI_MAXHOST * sizeof(char))) == NULL)
+ return SR_RET_OUT_OF_MEMORY;
+ if(getnameinfo((struct sockaddr*) psa, sizeof(struct sockaddr_in), *psz, NI_MAXHOST, NULL, 0, NI_NAMEREQD) != 0)
+ {
+ free(*psz);
+ *psz = NULL;
+ return SR_RET_ERR;
+ }
+ return SR_RET_OK;
+}
+
+
/**
* Wrapper for getsockname().
*
diff --git a/src/socketsWin32.c b/src/socketsWin32.c
index c97f226..38ffaa8 100644
--- a/src/socketsWin32.c
+++ b/src/socketsWin32.c
@@ -467,6 +467,34 @@ srRetVal sbSock_gethostname(char **psz)
}
+/**
+ * Wrapper for getnameinfo().
+ *
+ * \param psa Poiner to a struct sockaddr for which hostname
+ * is to obtain. Must not be NULL.
+ *
+ * \param psz Pointer to Pointer to hostname. Must not be NULL.
+ * On return, this pointer will refer to a newly allocated
+ * buffer containing the hostname. This buffer must be free()ed
+ * by the caller!
+ */
+srRetVal sbSock_getnameinfo(struct sockaddr_in *psa, char **psz)
+{
+ int iRet=0;
+ assert(psz != NULL);
+
+ if((*psz = (char*) malloc(NI_MAXHOST * sizeof(char))) == NULL)
+ return SR_RET_OUT_OF_MEMORY;
+ if(getnameinfo((struct sockaddr*) psa, sizeof(struct sockaddr_in), *psz, NI_MAXHOST, NULL, 0, NI_NAMEREQD) != 0)
+ {
+ free(*psz);
+ *psz = NULL;
+ return SR_RET_ERR;
+ }
+ return SR_RET_OK;
+}
+
+
/**
* Wrapper for getsockname().
*
diff --git a/src/srAPI.c b/src/srAPI.c
index 10ab219..919eb19 100644
--- a/src/srAPI.c
+++ b/src/srAPI.c
@@ -140,6 +140,7 @@ srAPIObj* srAPIInitLib(void)
pThis->iUDPListenPort = 0;
pThis->bListenUXDOMSOCK = FALSE;
pThis->szNameUXDOMSOCK = NULL;
+ pThis->bUseDNS = FALSE;
# endif
sbSockLayerInit(srAPI_bCallOSSocketInitializer);
@@ -204,6 +205,13 @@ srRetVal srAPISetOption(srAPIObj* pThis, SRoption iOpt, int iOptVal)
return SR_RET_INVALID_OPTVAL;
pThis->iBEEPListenPort = iOptVal;
break;
+ case srOPTION_USE_DNS:
+ if((pThis == NULL) || (pThis->OID != OIDsrAPI))
+ return SR_RET_INVALID_HANDLE;
+ if(iOptVal != TRUE && iOptVal != FALSE)
+ return SR_RET_INVALID_OPTVAL;
+ pThis->bUseDNS = iOptVal;
+ break;
default:
return SR_RET_INVALID_LIB_OPTION;
}
diff --git a/src/srAPI.h b/src/srAPI.h
index 8d016a5..46585b1 100644
--- a/src/srAPI.h
+++ b/src/srAPI.h
@@ -75,6 +75,7 @@ struct srAPIObject
int iUDPListenPort; /**< port to use when listening on UDP */
int bListenUXDOMSOCK; /**< TRUE/FALSE - listen to unix domain socket? */
char *szNameUXDOMSOCK; /**< pointer to c-string with socket name */
+ int bUseDNS; /**< TRUE/FALSE - use DNS for hostname lookup? */
# endif
};
typedef struct srAPIObject srAPIObj;
diff --git a/src/syslogmessage.c b/src/syslogmessage.c
index c0792ff..735ba1b 100644
--- a/src/syslogmessage.c
+++ b/src/syslogmessage.c
@@ -110,6 +110,8 @@ void srSLMGDestroy(srSLMGObj *pThis)
if((pThis->bOwnRemoteHostBuf == TRUE) && (pThis->pszRemoteHost != NULL))
free(pThis->pszRemoteHost);
+ if((pThis->bOwnRemoteHostNameBuf == TRUE) && (pThis->pszRemoteHostName != NULL))
+ free(pThis->pszRemoteHostName);
if((pThis->bOwnRawMsgBuf == TRUE) && (pThis->pszRawMsg != NULL))
free(pThis->pszRawMsg);
# if FEATURE_MSGAPI == 1
@@ -716,7 +718,7 @@ srRetVal srSLMGGetFacility(srSLMGObj *pThis, int *piFac)
}
-srRetVal srSLMGGetRemoteHost(srSLMGObj *pThis, char**ppsz)
+srRetVal srSLMGGetRemoteHost(srSLMGObj *pThis, unsigned char**ppsz)
{
srSLMGCHECKVALIDOBJECT_API(pThis);
if(ppsz== NULL)
@@ -726,7 +728,17 @@ srRetVal srSLMGGetRemoteHost(srSLMGObj *pThis, char**ppsz)
}
-srRetVal srSLMGGetHostname(srSLMGObj *pThis, char**ppsz)
+srRetVal srSLMGGetRemoteHostName(srSLMGObj *pThis, unsigned char**ppsz)
+{
+ srSLMGCHECKVALIDOBJECT_API(pThis);
+ if(ppsz== NULL)
+ return SR_RET_NULL_POINTER_PROVIDED;
+ *ppsz = pThis->pszRemoteHostName;
+ return SR_RET_OK;
+}
+
+
+srRetVal srSLMGGetHostname(srSLMGObj *pThis, unsigned char**ppsz)
{
srSLMGCHECKVALIDOBJECT_API(pThis);
if(ppsz== NULL)
@@ -859,6 +871,28 @@ srRetVal srSLMGSetRemoteHostIP(srSLMGObj *pThis, char *pszRemHostIP, int bCopyRe
}
+srRetVal srSLMGSetRemoteHostName(srSLMGObj *pThis, char *pszRemHostName, int bCopyRemHostName)
+{
+ srSLMGCHECKVALIDOBJECT_API(pThis);
+
+ if(pThis->pszRemoteHostName != NULL)
+ if(pThis->bOwnRemoteHostNameBuf == TRUE)
+ free(pThis->pszRemoteHostName);
+
+ if(bCopyRemHostName == TRUE)
+ {
+ if((pThis->pszRemoteHostName = sbNVTEUtilStrDup(pszRemHostName)) == NULL)
+ return SR_RET_OUT_OF_MEMORY;
+ }
+ else
+ pThis->pszRemoteHostName = pszRemHostName;
+
+ pThis->bOwnRemoteHostNameBuf = bCopyRemHostName;
+
+ return SR_RET_OK;
+}
+
+
srRetVal srSLMGSetRawMsg(srSLMGObj *pThis, char *pszRawMsg, int bCopyRawMsg)
{
srSLMGCHECKVALIDOBJECT_API(pThis);
diff --git a/src/syslogmessage.h b/src/syslogmessage.h
index 4ba7152..3b706b1 100644
--- a/src/syslogmessage.h
+++ b/src/syslogmessage.h
@@ -105,20 +105,22 @@ typedef enum srSLMGSource_ srSLMGSource;
*/
struct srSLMGObject
{
- srObjID OID; /**< object ID */
+ srObjID OID; /**< object ID */
unsigned char *pszRawMsg; /**< the raw message provided by the sender */
- int bOwnRawMsgBuf; /**< TRUE pszRawMsg owned by us & must be freed on destroy */
- unsigned char *pszRemoteHost; /**< remote host we received the message from (from socket layer, NOT message) */
+ int bOwnRawMsgBuf; /**< TRUE pszRawMsg owned by us & must be freed on destroy */
+ unsigned char *pszRemoteHost; /**< remote host we received the message from (from socket layer, NOT message) */
int bOwnRemoteHostBuf; /**< TRUE pszRemoteHost owned by us & must be freed on destroy */
+ unsigned char *pszRemoteHostName; /**< reverse DNS from pszRemoteHost */
+ int bOwnRemoteHostNameBuf; /**< TRUE pszRemoteHost owned by us & must be freed on destroy */
srSLMGFormat iFormat; /**< the format this message (most probably) is in */
srSLMGSource iSource; /**< the source this syslog message was received from */
# if FEATURE_MSGAPI == 1
- int iFacility; /**< the facility of the syslog message */
- int iSeverity; /**< the priority of the syslog message */
+ int iFacility; /**< the facility of the syslog message */
+ int iSeverity; /**< the priority of the syslog message */
unsigned char* pszHostname; /**< name of the remote host (from the syslog message itself) */
unsigned char* pszTag; /**< pointer to the tag value of the syslog message */
unsigned char* pszMsg; /**< the MSG part of the syslog message */
- int bOwnMsg; /**< TRUE pszMsg owned by us & must be freed on destroy */
+ int bOwnMsg; /**< TRUE pszMsg owned by us & must be freed on destroy */
unsigned char* pszLanguage; /**< language used inside the message (NULL, if unknown) */
/* The timestamp is split through several fields, because this makes it less
@@ -193,7 +195,29 @@ srRetVal srSLMGGetFacility(srSLMGObj *pThis, int *piFac);
* the same machine (e.g. UNIX /dev/log), the returned
* pointer is NULL. The caller needs to check for this!
*/
-srRetVal srSLMGGetRemoteHost(srSLMGObj *pThis, char**ppsz);
+srRetVal srSLMGGetRemoteHost(srSLMGObj *pThis, unsigned char**ppsz);
+
+/**
+ * Provide the caller back with the remote hostname that sent
+ * us this syslog message. Please note that this is the
+ * socket layer peer. It is not necessarily the same host
+ * that is specified as originator in the syslog message
+ * itself. If the message is relayed, these two are definitely
+ * different.
+ *
+ * \note The returned string is read-only. It is valid
+ * only until the srSLMGObj is destroyed. If the caller intends
+ * to use it for a prolonged period of time, it needs to
+ * copy it!
+ *
+ * \param ppsz Pointer to Pointer to unsigned char to
+ * receive the return string.
+ *
+ * \note If the message originated via inter-process communiction on
+ * the same machine (e.g. UNIX /dev/log), the returned
+ * pointer is NULL. The caller needs to check for this!
+ */
+srRetVal srSLMGGetRemoteHostName(srSLMGObj *pThis, unsigned char**ppsz);
/**
* Provide the caller back with the message sender name
@@ -209,7 +233,7 @@ srRetVal srSLMGGetRemoteHost(srSLMGObj *pThis, char**ppsz);
* \param ppsz Pointer to Pointer to unsigned char to
* receive the return string.
*/
-srRetVal srSLMGGetHostname(srSLMGObj *pThis, char**ppsz);
+srRetVal srSLMGGetHostname(srSLMGObj *pThis, unsigned char**ppsz);
/**
* Provide the caller back with the message's tag.
@@ -284,6 +308,20 @@ srRetVal srSLMGGetRawMSG(srSLMGObj *pThis, unsigned char**ppsz);
srRetVal srSLMGSetRemoteHostIP(srSLMGObj *pThis, char *pszRemHostIP, int bCopyRemHost);
/**
+ * Set the Remote Host name (reverse DNS).
+ * Any previously set value is replaced.
+ *
+ * \param pszRemHostName String pointing to the IP address of the remote
+ * host.
+ * \param bCopyRemHostName TRUE = copy the string, will own the copy
+ * (and need to free it), FALSE, do not copy
+ * caller owns & frees string. Must keep srSLMGObj
+ * alive long enough so that all methods can access
+ * it without danger.
+ */
+srRetVal srSLMGSetRemoteHostName(srSLMGObj *pThis, char *pszRemHostName, int bCopyRemHostName);
+
+/**
* Set the raw message text. Any previously set value is replaced.
*
* \param pszRawMsg String with the raw message text.
_______________________________________________
rsyslog mailing list
http://lists.adiscon.net/mailman/listinfo/rsyslog
http://www.rsyslog.com/professional-services/
What's up with rsyslog? Follow https://twitter.com/rgerhards
NOTE WELL: This is a PUBLIC mailing list, posts are ARCHIVED by a myriad of
sites beyond our control. PLEASE UNSUBSCRIBE and DO NOT POST if you DON'T LIKE
THAT.