diff --git a/src/server/conference.c b/src/server/conference.c
index 1022f49ff23434df0fa2629893d133e942376b3c..5abc96d59bf94b6fb41eacdacdd9ee6585c079a5 100644
--- a/src/server/conference.c
+++ b/src/server/conference.c
@@ -1,5 +1,5 @@
 /*
- * $Id: conference.c,v 0.18 1993/01/16 23:16:09 ceder Exp $
+ * $Id: conference.c,v 0.19 1993/08/05 00:13:25 ceder Exp $
  * Copyright (C) 1991  Lysator Academic Computer Association.
  *
  * This file is part of the LysKOM server.
@@ -28,7 +28,7 @@
  * All atomic calls that deals with conferences.
  */
 
-static char *rcsid = "$Id: conference.c,v 0.18 1993/01/16 23:16:09 ceder Exp $";
+static char *rcsid = "$Id: conference.c,v 0.19 1993/08/05 00:13:25 ceder Exp $";
 #include "rcs.h"
 USE(rcsid);
 
@@ -125,7 +125,8 @@ do_delete_conf (Conf_no      conf_no,
  */
 
 /*
- * Return TRUE if NAME is not already used.
+ * Return TRUE if NAME is not already used. Set kom_errno to
+ * KOM_LONG_STR or KOM_BAD_NAME if it fails.
  */
 
 Bool
@@ -133,6 +134,7 @@ legal_name( String name )
 {
     if (name.len == 0 || name.len > CONF_NAME_LEN )
     {
+	kom_errno = KOM_LONG_STR;
 	return FALSE;
     }
 
@@ -141,6 +143,7 @@ legal_name( String name )
 	if ( /* !isascii(*name.string) && */
 	    !isprint( *name.string ) )
 	{
+	    kom_errno = KOM_BAD_NAME;
 	    return FALSE;
 	}
 	name.string++;
@@ -343,7 +346,7 @@ change_name (Conf_no	conf_no,
 
     if ( !legal_name( new_name ) )
     {
-	kom_errno = KOM_BAD_NAME;
+	/* kom_errno will be set by legal_name(). */
 	return FAILURE;
     }
 
@@ -393,7 +396,7 @@ create_conf(String      name,
 
     if ( !legal_name( name ) )
     {
-	kom_errno = KOM_BAD_NAME;
+	/* kom_errno will be set by legal_name(). */
 	return 0;
     }
 
@@ -521,6 +524,61 @@ lookup_name (const String    name,
     return OK;
 }
 
+static Success
+do_lookup (const String    name,
+	   Conf_no_list * result,
+	   Bool want_persons)
+{
+    Conf_list_old raw_match;
+    int		i;
+    int retsize;
+
+    if ( cached_lookup_name( name, &raw_match ) != OK )
+	return FAILURE;
+
+    /* Find out how much space we need to allocate */
+    retsize = 0;
+    for (i = 0; i < raw_match.no_of_conf_nos; i++)
+    {
+	/* Don't call check access permissions here. It doesn't matter
+	   that much if we allocate slightly too much memory. */
+	if (raw_match.type_of_conf[i].letter_box == want_persons)
+	    retsize++;
+    }
+
+    result->conf_nos = tmp_alloc(sizeof(Conf_no) * retsize);
+    result->no_of_confs = 0;
+
+    for (i = 0; i < raw_match.no_of_conf_nos; i++)
+    {
+	if (raw_match.type_of_conf[i].letter_box == want_persons
+	    && fast_access_perm (raw_match.conf_nos[i],
+				 ACTPERS, ACT_P) > none )
+	{
+	    result->conf_nos[result->no_of_confs++] = raw_match.conf_nos[i];
+	    if (result->no_of_confs > retsize)
+		restart_kom("ERROR: conference.c: do_lookup: error.\n");
+	}
+    }
+
+    return OK;
+}
+
+extern  Success
+lookup_person (const String  pattern,
+	       Conf_no_list  *result)
+{
+    return do_lookup(pattern, result, TRUE);
+}
+
+extern  Success
+lookup_conf (const String  pattern,
+	     Conf_no_list  *result)
+{
+    return do_lookup(pattern, result, FALSE);
+}
+
+
 
 /*
  * Get status for a conference.