diff --git a/modules/webadmin.cpp b/modules/webadmin.cpp
index 92c8dd91..3a4e0920 100644
--- a/modules/webadmin.cpp
+++ b/modules/webadmin.cpp
@@ -164,7 +164,13 @@ CString CWebAdminSock::Header(const CString& sTitle) {
"\r\n
ZNC - " + sTitle.Escape_n(CString::EHTML) + "\r\n"
"\r\n"
"\r\n"
- "" + sTitle.Escape_n(CString::EHTML) + " |
\r\n"
+ ""
+ ""
+ "| | "
+ "" + sTitle.Escape_n(CString::EHTML) + " | "
+ "" + GetUser().Escape_n(CString::EHTML) + "@" + GetRemoteIP().Escape_n(CString::EHTML) + " | "
+ " "
+ " |
\r\n"
"| \r\n";
if (IsAdmin()) {
@@ -180,7 +186,7 @@ CString CWebAdminSock::Header(const CString& sTitle) {
}
CString CWebAdminSock::Footer() {
- return " |
| " + CZNC::Get().GetTag() + " |
\r\n"
+ return "| " + CZNC::Get().GetTag().Escape_n(CString::EHTML) + " |
\r\n"
"
\r\n\r\n";
}
@@ -192,14 +198,18 @@ bool CWebAdminSock::OnLogin(const CString& sUser, const CString& sPass) {
CUser* pUser = CZNC::Get().FindUser(GetUser());
- if (pUser && pUser->CheckPass(GetPass())) {
- if (pUser->IsAdmin()) {
- m_bAdmin = true;
- } else {
- m_pUser = pUser;
- }
+ if (pUser) {
+ CString sHost = GetRemoteIP();
- return true;
+ if (pUser->IsHostAllowed(sHost) && pUser->CheckPass(GetPass())) {
+ if (pUser->IsAdmin()) {
+ m_bAdmin = true;
+ } else {
+ m_pUser = pUser;
+ }
+
+ return true;
+ }
}
return false;
@@ -684,10 +694,19 @@ bool CWebAdminSock::UserPage(CString& sPageRet, CUser* pUser) {
sPageRet += "
\r\n";
}
+ CString sIP = GetRemoteIP();
+
+ sIP = sIP.Token(0, false, ".") + "." + sIP.Token(1, false, ".") + "." + sIP.Token(2, false, ".") + ".*";
+
sPageRet += "Password:
\r\n"
- "Confirm Password:
\r\n"
- "Allowed IPs:
\r\n"
- "
\r\n"
+ "Confirm Password:
\r\n"
+ "Allowed IPs:
\r\n";
+
+ if (pUser && pUser == CZNC::Get().FindUser(GetUser())) {
+ sPageRet += " \r\n";
+ }
+
+ sPageRet += "
\r\n"
"IRC Information
\r\n"
"
Nick:
\r\n"
@@ -916,6 +935,10 @@ CUser* CWebAdminSock::GetNewUser(CString& sPageRet, CUser* pUser) {
pNewUser->AddAllowedHost(vsArgs[a].Trim_n());
}
+ if (HasParam("ownip")) {
+ pNewUser->AddAllowedHost(GetParam("ownip"));
+ }
+
GetParam("ctcpreplies").Split("\n", vsArgs);
for (a = 0; a < vsArgs.size(); a++) {
CString sReply = vsArgs[a].TrimRight_n("\r");