diff --git a/src/error.c b/src/error.c
index 517fc7d671a82930fa3fb22216168ed39da09161..bf52817b66187598f656e5834b3fa55dd21d53ef 100644
--- a/src/error.c
+++ b/src/error.c
@@ -19,7 +19,7 @@
 #include "module_support.h"
 #include "threads.h"
 
-RCSID("$Id: error.c,v 1.33 1999/04/15 19:12:49 hubbe Exp $");
+RCSID("$Id: error.c,v 1.34 1999/04/17 13:47:16 grubba Exp $");
 
 #undef ATTRIBUTE
 #define ATTRIBUTE(X)
@@ -479,6 +479,18 @@ void resource_error(
   ERROR_DONE(generic);
 }
 
+void permission_error(
+  char *func,
+  struct svalue *base_sp, int args,
+  char *permission_type,
+  char *desc, ...) ATTRIBUTE((noreturn, format(printf, 2, 3)))
+{
+  INIT_ERROR(permission);
+  ERROR_STRUCT(permission,o)->permission_type=
+    make_shared_string(permission_type);
+  ERROR_DONE(generic);
+}
+
 void init_error(void)
 {
 #define ERR_SETUP
diff --git a/src/errors.h b/src/errors.h
index daeb904cf07fa8977135954c330e1f40891957a8..fd452f147a469073ea925e200653ebb46a9d3987 100644
--- a/src/errors.h
+++ b/src/errors.h
@@ -92,6 +92,10 @@ DECLARE_ERROR(resource,
   ERR_VAR(INT_TYPE, int, T_INT, howmuch)
 )
 
+DECLARE_ERROR(permission,
+	      ERR_INHERIT(generic),
+  ERR_VAR(struct pike_string *,string,T_STRING,permission_type)
+)
 #undef DECLARE_ERROR
 #undef ERR_INHERIT
 #undef ERR_VAR