]> arthur.barton.de Git - ngircd-alex.git/blobdiff - src/ngircd/client.c
Make sure signal.h is #include'd when needed
[ngircd-alex.git] / src / ngircd / client.c
index 7cf10da6e23666df2ac3fbb5b9bf38a7ba700d53..44123eaa0b8d9af5444f0098b5fe1d656017b2b2 100644 (file)
@@ -35,7 +35,6 @@
 #include <imp.h>
 #include "ngircd.h"
 #include "channel.h"
-#include "resolve.h"
 #include "conf.h"
 #include "hash.h"
 #include "irc-write.h"
@@ -201,8 +200,10 @@ Init_New_Client(CONN_ID Idx, CLIENT *Introducer, CLIENT *TopServer,
        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)
@@ -353,6 +354,25 @@ Client_SetUser( CLIENT *Client, const char *User, bool Idented )
 } /* 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 )
 {
@@ -602,6 +622,31 @@ Client_User( CLIENT *Client )
 } /* 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 )
 {