#include <imp.h>
#include "ngircd.h"
#include "channel.h"
-#include "resolve.h"
#include "conf.h"
#include "hash.h"
#include "irc-write.h"
client->type = Type;
if (ID)
Client_SetID(client, ID);
- if (User)
+ if (User) {
Client_SetUser(client, User, Idented);
+ Client_SetOrigUser(client, User);
+ }
if (Hostname)
Client_SetHostname(client, Hostname);
if (Info)
} /* Client_SetUser */
+/**
+ * Set "original" user name of a client.
+ * This function saves the "original" user name, the user name specified by
+ * the peer using the USER command, into the CLIENT structure. This user
+ * name may be used for authentication, for example.
+ * @param Client The client.
+ * @param User User name to set.
+ */
+GLOBAL void
+Client_SetOrigUser(CLIENT *Client, const char *User) {
+ assert(Client != NULL);
+ assert(User != NULL);
+
+#ifdef PAM & IDENTAUTH
+ strlcpy(Client->orig_user, User, sizeof(Client->orig_user));
+#endif
+} /* Client_SetOrigUser */
+
+
GLOBAL void
Client_SetInfo( CLIENT *Client, const char *Info )
{
} /* Client_User */
+#ifdef PAM
+
+/**
+ * Get the "original" user name as supplied by the USER command.
+ * The user name as given by the client is used for authentication instead
+ * of the one detected using IDENT requests.
+ * @param Client The client.
+ * @return Original user name.
+ */
+GLOBAL char *
+Client_OrigUser(CLIENT *Client) {
+#ifndef IDENTAUTH
+ char *user = Client->user;
+
+ if (user[0] == '~')
+ user++;
+ return user;
+#else
+ return Client->orig_user;
+#endif
+} /* Client_OrigUser */
+
+#endif
+
+
GLOBAL char *
Client_Hostname( CLIENT *Client )
{
} /* Client_RegisterWhowas */
-GLOBAL char *
+GLOBAL const char *
Client_TypeText(CLIENT *Client)
{
assert(Client != NULL);
"%s \"%s\" unregistered (connection %d): %s",
Client_TypeText(Client), Client_Mask(Client),
Client->conn_id, Txt);
+ Log_ServerNotice('c', "Client exiting: %s (%s@%s) [%s]",
+ Client_ID(Client), Client_User(Client),
+ Client_Hostname(Client), Txt);
if (SendQuit) {
/* Inforam all the other servers */