#include "s_bsd.h"
#include "s_conf.h"
#include "s_user.h"
+#include "s_debug.h"
#include "send.h"
-
/*
* m_fakehost - fakehost user message handler
*
/* Assign and propagate the fakehost */
ircd_strncpy(cli_user(cptr)->fakehost, parv[1], HOSTLEN);
- hide_hostmask(cptr, FLAG_FAKEHOST);
+ hide_hostmask(cptr, HIDE_HOSTMASK_FLAG_FAKEHOST);
/*for(i = HighestFd; i >= 0; i--) {
if((another = LocalClientArray[i]) && IsServer(another)) {
/* Assign and propagate the fakehost */
ircd_strncpy(cli_user(acptr)->fakehost, parv[2], HOSTLEN);
- hide_hostmask(acptr, FLAG_FAKEHOST);
+ hide_hostmask(acptr, HIDE_HOSTMASK_FLAG_FAKEHOST);
/*
for(i = HighestFd; i >= 0; i--) {
if((another = LocalClientArray[i]) && IsServer(another)) {
/* Set fakehost and propagate the changed host. */
ircd_strncpy(cli_user(target)->fakehost, parv[2], HOSTLEN);
- hide_hostmask(target, FLAG_FAKEHOST);
+ hide_hostmask(target, HIDE_HOSTMASK_FLAG_FAKEHOST);
/* Borrowed from send_umode_out().
* I found no better way to do this. However, maybe someone has the time to check out
return 0;
}
+/* ms_fakehost2 - new fakehost server message handler (SRVX initialized)
+ *
+ * parv[0] = sender prefix
+ * parv[1] = target user numeric
+ * parv[2] = target user's new ident
+ * parv[3] = target user's new fake host
+ * parv[4] = FORCE (optional)
+ */
+/** Remote fakehost
+ * Allows servers to force a fakehost on remote users.
+ *
+ * The FAKEHOST request can be generated by EVERY server. It is forwarded to the server
+ * of the user which then sets the fakehost and broadcasts the new fakehost.
+ */
+int ms_fakehost2(struct Client *cptr, struct Client *sptr, int parc, char *parv[]) {
+ struct Client *target, *acptr;
+ int i;
+
+ if(parc < 4) {
+ return need_more_params(sptr, "FAKEHOST");
+ }
+
+ if(!(target = findNUser(parv[1]))) {
+ /* Silently ignore FAKEHOSTs for disconnected users. */
+ return 0;
+ }
+
+ /* Ignore the assignment if it changes nothing. */
+ if(IsFakeHost(target) && IsFakeIdent(target) && strcmp(cli_user(target)->fakehost, parv[3]) == 0 && strcmp(cli_user(target)->fakeuser, parv[2]) == 0) {
+ return 0;
+ }
+
+ /* Set fakehost and propagate the changed host. */
+ ircd_strncpy(cli_user(target)->fakehost, parv[3], HOSTLEN);
+ ircd_strncpy(cli_user(target)->fakeuser, parv[2], USERLEN);
+ hide_hostmask(target, HIDE_HOSTMASK_FLAG_FAKEHOST | HIDE_HOSTMASK_FLAG_FAKEIDENT);
+
+ sendcmdto_serv_butone(sptr, CMD_FAKEHOST2, cptr, "%C %s %s", target, cli_user(target)->fakeuser, cli_user(target)->fakehost);
+
+ return 0;
+}
+
/*
* ms_fakehost_old - old fakehost server message handler
*
* parv[0] = sender prefix
* parv[1] = target user numeric
* parv[2] = target user's new fake host
+ * parv[3] = target user's new fake ident
*/
int ms_fakehost_old(struct Client* cptr, struct Client* sptr, int parc, char* parv[]) {
struct Client *target;
/* Assign and propagate the fakehost */
ircd_strncpy(cli_user(target)->fakehost, parv[2], HOSTLEN);
- hide_hostmask(target, FLAG_FAKEHOST);
+ hide_hostmask(target, HIDE_HOSTMASK_FLAG_FAKEHOST);
sendcmdto_serv_butone(sptr, CMD_FAKEHOST_OLD, cptr, "%C %s", target,
cli_user(target)->fakehost);