diff --git a/src/sbbs3/userdat.c b/src/sbbs3/userdat.c
index df7458aa9e1f171bd0ce35acdabca56c3a3f5690..07182e5c6dc2b2463d5e0ce2df56cbc780e26911 100644
--- a/src/sbbs3/userdat.c
+++ b/src/sbbs3/userdat.c
@@ -3355,3 +3355,37 @@ BOOL DLLCALL user_set_time_property(scfg_t* scfg, unsigned user_number, const ch
 }
 
 #endif /* !NO_SOCKET_SUPPORT */
+
+/****************************************************************************/
+/* Returns user number or 0 on failure or "user not found".					*/
+/****************************************************************************/
+int lookup_user(scfg_t* cfg, link_list_t* list, const char *inname)
+{
+	if(inname == NULL || *inname == 0)
+		return 0;
+
+	if(list->first == NULL) {
+		user_t user;
+		int userdat = openuserdat(cfg, /* modify */FALSE);
+		if(userdat < 0)
+			return 0;
+
+		for(user.number = 1; ;user.number++) {
+			if(fgetuserdat(cfg, &user, userdat) != 0)
+				break;
+			if(user.misc&DELETED)
+				continue;
+			listPushNodeData(list, &user, sizeof(user));
+		}
+		close(userdat);
+	}
+	for(list_node_t* node = listFirstNode(list); node != NULL; node = node->next) {
+		if(stricmp(((user_t*)node->data)->alias, inname) == 0)
+			return ((user_t*)node->data)->number;
+	}
+	for(list_node_t* node = listFirstNode(list); node != NULL; node = node->next) {
+		if(stricmp(((user_t*)node->data)->name, inname) == 0)
+			return ((user_t*)node->data)->number;
+	}
+	return 0;
+}
diff --git a/src/sbbs3/userdat.h b/src/sbbs3/userdat.h
index 9307c4f5fa36cdfe0c07a636660c164ac7e8825b..4f60493d722b1bc9065161ae627308664a7787d8 100644
--- a/src/sbbs3/userdat.h
+++ b/src/sbbs3/userdat.h
@@ -152,6 +152,8 @@ DLLEXPORT BOOL	DLLCALL check_name(scfg_t*, const char* name);
 DLLEXPORT BOOL	DLLCALL sysop_available(scfg_t*);
 DLLEXPORT BOOL	DLLCALL set_sysop_availability(scfg_t*, BOOL available);
 
+DLLEXPORT int	DLLCALL lookup_user(scfg_t*, link_list_t*, const char* name);
+
 /* Login attempt/hack tracking */
 typedef struct {
 	union xp_sockaddr addr;	/* host with consecutive failed login attempts */