tiff: moved to github
tiff: moved to github

git-svn-id: svn://svn.openwrt.org/openwrt/packages@41779 3c298f89-4303-0410-b956-a3cf2f4a3e73

file:a/lang/luaexpat/Makefile (deleted)
#  
# Copyright (C) 2009 OpenWrt.org  
#  
# This is free software, licensed under the GNU General Public License v2.  
# See /LICENSE for more information.  
#  
 
include $(TOPDIR)/rules.mk  
 
PKG_NAME:=luaexpat  
PKG_VERSION:=1.1  
PKG_RELEASE:=2  
 
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz  
PKG_SOURCE_URL:=http://luaforge.net/frs/download.php/2469  
PKG_MD5SUM:=6ecb895ccf5cff1e7f2facd438b1f8d0  
 
include $(INCLUDE_DIR)/package.mk  
 
define Package/luaexpat  
SUBMENU:=Lua  
SECTION:=lang  
CATEGORY:=Languages  
TITLE:=LuaExpat  
URL:=http://www.keplerproject.org/luaexpat/  
DEPENDS:=+lua +libexpat  
endef  
 
define Package/luaexpat/description  
LuaExpat is a SAX XML parser based on the Expat library.  
endef  
 
define Build/Configure  
endef  
 
define Build/Compile  
$(CP) files/compat-5.1r5 $(PKG_BUILD_DIR)/compat-5.1r5  
$(MAKE) -C $(PKG_BUILD_DIR) \  
EXPAT_INC="$(STAGING_DIR)/usr/include/" \  
LUA_INC="$(STAGING_DIR)/usr/include/" \  
LUA_LIBDIR="$(STAGING_DIR)/usr/lib/" \  
COMPAT_DIR="$(PKG_BUILD_DIR)/compat-5.1r5" \  
LIB_OPTION="-shared $(TARGET_LDFLAGS)" \  
CC="$(TARGET_CC) $(TARGET_CFLAGS) $(FPIC) -std=c99" \  
LD="$(TARGET_CROSS)ld -shared"  
endef  
 
define Package/luaexpat/install  
$(INSTALL_DIR) $(1)/usr/lib/lua  
$(INSTALL_DATA) $(PKG_BUILD_DIR)/src/lxp.so.1.1.0 $(1)/usr/lib/lua/lxp.so  
$(INSTALL_DIR) $(1)/usr/lib/lua/lxp  
$(INSTALL_DATA) $(PKG_BUILD_DIR)/src/lxp/lom.lua $(1)/usr/lib/lua/lxp  
endef  
 
$(eval $(call BuildPackage,luaexpat))  
 
/*  
** Compat-5.1  
** Copyright Kepler Project 2004-2006 (http://www.keplerproject.org/compat)  
** $Id: compat-5.1.c,v 1.13 2006/02/20 21:12:47 carregal Exp $  
*/  
 
#include <stdio.h>  
#include <string.h>  
#include "lua.h"  
#include "lauxlib.h"  
#include "compat-5.1.h"  
 
static void getfield(lua_State *L, int idx, const char *name) {  
const char *end = strchr(name, '.');  
lua_pushvalue(L, idx);  
while (end) {  
lua_pushlstring(L, name, end - name);  
lua_gettable(L, -2);  
lua_remove(L, -2);  
if (lua_isnil(L, -1)) return;  
name = end+1;  
end = strchr(name, '.');  
}  
lua_pushstring(L, name);  
lua_gettable(L, -2);  
lua_remove(L, -2);  
}  
 
static void setfield(lua_State *L, int idx, const char *name) {  
const char *end = strchr(name, '.');  
lua_pushvalue(L, idx);  
while (end) {  
lua_pushlstring(L, name, end - name);  
lua_gettable(L, -2);  
/* create table if not found */  
if (lua_isnil(L, -1)) {  
lua_pop(L, 1);  
lua_newtable(L);  
lua_pushlstring(L, name, end - name);  
lua_pushvalue(L, -2);  
lua_settable(L, -4);  
}  
lua_remove(L, -2);  
name = end+1;  
end = strchr(name, '.');  
}  
lua_pushstring(L, name);  
lua_pushvalue(L, -3);  
lua_settable(L, -3);  
lua_pop(L, 2);  
}  
 
LUALIB_API void luaL_module(lua_State *L, const char *libname,  
const luaL_reg *l, int nup) {  
if (libname) {  
getfield(L, LUA_GLOBALSINDEX, libname); /* check whether lib already exists */  
if (lua_isnil(L, -1)) {  
int env, ns;  
lua_pop(L, 1); /* get rid of nil */  
lua_pushliteral(L, "require");  
lua_gettable(L, LUA_GLOBALSINDEX); /* look for require */  
lua_getfenv(L, -1); /* getfenv(require) */  
lua_remove(L, -2); /* remove function require */  
env = lua_gettop(L);  
 
lua_newtable(L); /* create namespace for lib */  
ns = lua_gettop(L);  
getfield(L, env, "package.loaded"); /* get package.loaded table */  
if (lua_isnil(L, -1)) { /* create package.loaded table */  
lua_pop(L, 1); /* remove previous result */  
lua_newtable(L);  
lua_pushvalue(L, -1);  
setfield(L, env, "package.loaded");  
}  
else if (!lua_istable(L, -1))  
luaL_error(L, "name conflict for library `%s'", libname);  
lua_pushstring(L, libname);  
lua_pushvalue(L, ns);  
lua_settable(L, -3); /* package.loaded[libname] = ns */  
lua_pop(L, 1); /* get rid of package.loaded table */  
lua_pushvalue(L, ns); /* copy namespace */  
setfield(L, LUA_GLOBALSINDEX, libname);  
lua_remove (L, env); /* remove env */  
}  
lua_insert(L, -(nup+1)); /* move library table to below upvalues */  
}  
for (; l->name; l++) {  
int i;  
lua_pushstring(L, l->name);  
for (i=0; i<nup; i++) /* copy upvalues to the top */  
lua_pushvalue(L, -(nup+1));  
lua_pushcclosure(L, l->func, nup);  
lua_settable(L, -(nup+3));  
}  
lua_pop(L, nup); /* remove upvalues */  
}  
 
 
/*  
** Compat-5.1  
** Copyright Kepler Project 2004-2006 (http://www.keplerproject.org/compat/)  
** $Id: compat-5.1.h,v 1.8 2006/02/20 21:12:47 carregal Exp $  
*/  
 
#ifndef COMPAT_H  
 
LUALIB_API void luaL_module(lua_State *L, const char *libname,  
const luaL_reg *l, int nup);  
#define luaL_openlib luaL_module  
 
#endif  
 
--  
-- Compat-5.1  
-- Copyright Kepler Project 2004-2006 (http://www.keplerproject.org/compat)  
-- According to Lua 5.1  
-- $Id: compat-5.1.lua,v 1.22 2006/02/20 21:12:47 carregal Exp $  
--  
 
_COMPAT51 = "Compat-5.1 R5"  
 
local LUA_DIRSEP = '/'  
local LUA_OFSEP = '_'  
local OLD_LUA_OFSEP = ''  
local POF = 'luaopen_'  
local LUA_PATH_MARK = '?'  
local LUA_IGMARK = ':'  
 
local assert, error, getfenv, ipairs, loadfile, loadlib, pairs, setfenv, setmetatable, type = assert, error, getfenv, ipairs, loadfile, loadlib, pairs, setfenv, setmetatable, type  
local find, format, gfind, gsub, sub = string.find, string.format, string.gfind, string.gsub, string.sub  
 
--  
-- avoid overwriting the package table if it's already there  
--  
package = package or {}  
local _PACKAGE = package  
 
package.path = LUA_PATH or os.getenv("LUA_PATH") or  
("./?.lua;" ..  
"/usr/local/share/lua/5.0/?.lua;" ..  
"/usr/local/share/lua/5.0/?/?.lua;" ..  
"/usr/local/share/lua/5.0/?/init.lua" )  
 
package.cpath = LUA_CPATH or os.getenv("LUA_CPATH") or  
"./?.so;" ..  
"./l?.so;" ..  
"/usr/local/lib/lua/5.0/?.so;" ..  
"/usr/local/lib/lua/5.0/l?.so"  
 
--  
-- make sure require works with standard libraries  
--  
package.loaded = package.loaded or {}  
package.loaded.debug = debug  
package.loaded.string = string  
package.loaded.math = math  
package.loaded.io = io  
package.loaded.os = os  
package.loaded.table = table  
package.loaded.base = _G  
package.loaded.coroutine = coroutine  
local _LOADED = package.loaded  
 
--  
-- avoid overwriting the package.preload table if it's already there  
--  
package.preload = package.preload or {}  
local _PRELOAD = package.preload  
 
 
--  
-- looks for a file `name' in given path  
--  
local function findfile (name, pname)  
name = gsub (name, "%.", LUA_DIRSEP)  
local path = _PACKAGE[pname]  
assert (type(path) == "string", format ("package.%s must be a string", pname))  
for c in gfind (path, "[^;]+") do  
c = gsub (c, "%"..LUA_PATH_MARK, name)  
local f = io.open (c)  
if f then  
f:close ()  
return c  
end  
end  
return nil -- not found  
end  
 
 
--  
-- check whether library is already loaded  
--  
local function loader_preload (name)  
assert (type(name) == "string", format (  
"bad argument #1 to `require' (string expected, got %s)", type(name)))  
assert (type(_PRELOAD) == "table", "`package.preload' must be a table")  
return _PRELOAD[name]  
end  
 
 
--  
-- Lua library loader  
--  
local function loader_Lua (name)  
assert (type(name) == "string", format (  
"bad argument #1 to `require' (string expected, got %s)", type(name)))  
local filename = findfile (name, "path")  
if not filename then  
return false  
end  
local f, err = loadfile (filename)  
if not f then  
error (format ("error loading module `%s' (%s)", name, err))  
end  
return f  
end  
 
 
local function mkfuncname (name)  
name = gsub (name, "^.*%"..LUA_IGMARK, "")  
name = gsub (name, "%.", LUA_OFSEP)  
return POF..name  
end  
 
local function old_mkfuncname (name)  
--name = gsub (name, "^.*%"..LUA_IGMARK, "")  
name = gsub (name, "%.", OLD_LUA_OFSEP)  
return POF..name  
end  
 
--  
-- C library loader  
--  
local function loader_C (name)  
assert (type(name) == "string", format (  
"bad argument #1 to `require' (string expected, got %s)", type(name)))  
local filename = findfile (name, "cpath")  
if not filename then  
return false  
end  
local funcname = mkfuncname (name)  
local f, err = loadlib (filename, funcname)  
if not f then  
funcname = old_mkfuncname (name)  
f, err = loadlib (filename, funcname)  
if not f then  
error (format ("error loading module `%s' (%s)", name, err))  
end  
end  
return f  
end  
 
 
local function loader_Croot (name)  
local p = gsub (name, "^([^.]*).-$", "%1")  
if p == "" then  
return  
end  
local filename = findfile (p, "cpath")  
if not filename then  
return  
end  
local funcname = mkfuncname (name)  
local f, err, where = loadlib (filename, funcname)  
if f then  
return f  
elseif where ~= "init" then  
error (format ("error loading module `%s' (%s)", name, err))  
end  
end  
 
-- create `loaders' table  
package.loaders = package.loaders or { loader_preload, loader_Lua, loader_C, loader_Croot, }  
local _LOADERS = package.loaders  
 
 
--  
-- iterate over available loaders  
--  
local function load (name, loaders)  
-- iterate over available loaders  
assert (type (loaders) == "table", "`package.loaders' must be a table")  
for i, loader in ipairs (loaders) do  
local f = loader (name)  
if f then  
return f  
end  
end  
error (format ("module `%s' not found", name))  
end  
 
-- sentinel  
local sentinel = function () end  
 
--  
-- new require  
--  
function _G.require (modname)  
assert (type(modname) == "string", format (  
"bad argument #1 to `require' (string expected, got %s)", type(name)))  
local p = _LOADED[modname]  
if p then -- is it there?  
if p == sentinel then  
error (format ("loop or previous error loading module '%s'", modname))  
end  
return p -- package is already loaded  
end  
local init = load (modname, _LOADERS)  
_LOADED[modname] = sentinel  
local actual_arg = _G.arg  
_G.arg = { modname }  
local res = init (modname)  
if res then  
_LOADED[modname] = res  
end  
_G.arg = actual_arg  
if _LOADED[modname] == sentinel then  
_LOADED[modname] = true  
end  
return _LOADED[modname]  
end  
 
 
-- findtable  
local function findtable (t, f)  
assert (type(f)=="string", "not a valid field name ("..tostring(f)..")")  
local ff = f.."."  
local ok, e, w = find (ff, '(.-)%.', 1)  
while ok do  
local nt = rawget (t, w)  
if not nt then  
nt = {}  
t[w] = nt  
elseif type(t) ~= "table" then  
return sub (f, e+1)  
end  
t = nt  
ok, e, w = find (ff, '(.-)%.', e+1)  
end  
return t  
end  
 
--  
-- new package.seeall function  
--  
function _PACKAGE.seeall (module)  
local t = type(module)  
assert (t == "table", "bad argument #1 to package.seeall (table expected, got "..t..")")  
local meta = getmetatable (module)  
if not meta then  
meta = {}  
setmetatable (module, meta)  
end  
meta.__index = _G  
end  
 
 
--  
-- new module function  
--  
function _G.module (modname, ...)  
local ns = _LOADED[modname]  
if type(ns) ~= "table" then  
ns = findtable (_G, modname)  
if not ns then  
error (string.format ("name conflict for module '%s'", modname))  
end  
_LOADED[modname] = ns  
end  
if not ns._NAME then  
ns._NAME = modname  
ns._M = ns  
ns._PACKAGE = gsub (modname, "[^.]*$", "")  
end  
setfenv (2, ns)  
for i, f in ipairs (arg) do  
f (ns)  
end  
end  
 
--- a/config  
+++ b/config  
@@ -31,6 +31,6 @@  
-Wshadow \  
-Wwrite-strings  
 
-CFLAGS = $(CWARNS) -ansi -O2 -I$(LUA_INC) \  
+CFLAGS = $(CWARNS) -O2 -I$(LUA_INC) \  
-I$(COMPAT_DIR) -I$(EXPAT_INC)  
CC = gcc  
 
#  
# Copyright (C) 2008-2010 OpenWrt.org  
#  
# This is free software, licensed under the GNU General Public License v2.  
# See /LICENSE for more information.  
#  
 
include $(TOPDIR)/rules.mk  
 
PKG_NAME:=luafilesystem  
PKG_VERSION:=1.6.2  
PKG_RELEASE:=1  
 
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz  
PKG_SOURCE_URL:=https://github.com/keplerproject/luafilesystem.git  
PKG_SOURCE_VERSION:=2fd989cd6c777583be1c93616018c55b2cbb1bcf  
PKG_SOURCE_PROTO:=git  
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)  
 
include $(INCLUDE_DIR)/package.mk  
 
define Package/luafilesystem  
SUBMENU:=Lua  
SECTION:=lang  
CATEGORY:=Languages  
TITLE:=LuaFileSystem  
URL:=http://keplerproject.github.com/luafilesystem/  
DEPENDS:=+liblua  
endef  
 
define Package/luafilesystem/description  
This package contains the LuaFileSystem library, a set of portable  
functions for directory creation, listing and deletion and for file  
locking.  
endef  
 
define Build/Configure  
endef  
 
TARGET_CFLAGS += $(FPIC) $(TARGET_CPPFLAGS)  
 
TARGET_LDFLAGS += -llua  
 
define Build/Compile  
$(MAKE) -C $(PKG_BUILD_DIR) \  
$(TARGET_CONFIGURE_OPTS) \  
CFLAGS="$(TARGET_CFLAGS) -std=gnu99" \  
LDFLAGS="$(TARGET_LDFLAGS)"  
$(TARGET_CROSS)ar r $(PKG_BUILD_DIR)/src/luafilesystem.a $(PKG_BUILD_DIR)/src/lfs.o  
endef  
 
define Build/InstallDev  
$(INSTALL_DIR) $(STAGING_DIR)/usr/include  
$(INSTALL_DIR) $(STAGING_DIR)/usr/lib/lua  
$(INSTALL_DATA) $(PKG_BUILD_DIR)/src/lfs.h $(STAGING_DIR)/usr/include  
$(INSTALL_BIN) $(PKG_BUILD_DIR)/src/lfs.so $(STAGING_DIR)/usr/lib/lua  
$(INSTALL_DATA) $(PKG_BUILD_DIR)/src/luafilesystem.a $(STAGING_DIR)/usr/lib/lua  
endef  
 
define Package/luafilesystem/install  
$(INSTALL_DIR) $(1)/usr/lib/lua  
$(INSTALL_BIN) $(PKG_BUILD_DIR)/src/lfs.so $(1)/usr/lib/lua/lfs.so  
endef  
 
$(eval $(call BuildPackage,luafilesystem))  
 
file:a/lang/luasocket/Makefile (deleted)
#  
# Copyright (C) 2009-2013 OpenWrt.org  
#  
# This is free software, licensed under the GNU General Public License v2.  
# See /LICENSE for more information.  
#  
 
include $(TOPDIR)/rules.mk  
 
PKG_NAME:=luasocket  
PKG_SOURCE_VERSION:=6d5e40c324c84d9c1453ae88e0ad5bdd0a631448  
PKG_VERSION:=3.0-rc1-20130909  
PKG_RELEASE:=2  
 
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2  
PKG_SOURCE_URL:=https://github.com/diegonehab/luasocket.git  
PKG_SOURCE_PROTO:=git  
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)  
 
include $(INCLUDE_DIR)/package.mk  
 
define Package/luasocket  
SUBMENU:=Lua  
SECTION:=lang  
CATEGORY:=Languages  
TITLE:=LuaSocket  
URL:=http://luasocket.luaforge.net/  
DEPENDS:=+lua  
endef  
 
define Package/luasocket/description  
LuaSocket is the most comprehensive networking support  
library for the Lua language. It provides easy access to  
TCP, UDP, DNS, SMTP, FTP, HTTP, MIME and much more.  
endef  
 
define Build/Configure  
endef  
 
define Build/Compile  
$(MAKE) -C $(PKG_BUILD_DIR)/ \  
LIBDIR="$(TARGET_LDFLAGS)" \  
CC="$(TARGET_CC) $(TARGET_CFLAGS) $(TARGET_CPPFLAGS) -std=gnu99" \  
LD="$(TARGET_CROSS)ld -shared" \  
all  
endef  
 
 
define Package/luasocket/install  
$(INSTALL_DIR) $(1)/usr/lib/lua  
$(INSTALL_DATA) $(PKG_BUILD_DIR)/src/{ltn12,mime,socket}.lua $(1)/usr/lib/lua  
$(INSTALL_BIN) $(PKG_BUILD_DIR)/src/mime.so.1.0.3 $(1)/usr/lib/lua  
$(INSTALL_BIN) $(PKG_BUILD_DIR)/src/socket.so.3.0-rc1 $(1)/usr/lib/lua  
$(INSTALL_DIR) $(1)/usr/lib/lua/mime  
ln -sf ../mime.so.1.0.3 $(1)/usr/lib/lua/mime/core.so  
$(INSTALL_DIR) $(1)/usr/lib/lua/socket  
$(INSTALL_DATA) $(PKG_BUILD_DIR)/src/{ftp,http,smtp,tp,url,headers}.lua $(1)/usr/lib/lua/socket  
ln -sf ../socket.so.3.0-rc1 $(1)/usr/lib/lua/socket/core.so  
endef  
 
$(eval $(call BuildPackage,luasocket))  
 
From 96fdf07acf78ecfc9be76a8b0591f38fe6f1a875 Mon Sep 17 00:00:00 2001  
From: Steven Barth <steven@midlink.org>  
Date: Sat, 9 Nov 2013 12:01:42 +0100  
Subject: [PATCH] Add interface resolving  
 
---  
src/if.c | 113 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++  
src/if.h | 27 ++++++++++++++  
src/luasocket.c | 2 +  
src/makefile | 2 +  
src/options.c | 9 +++++  
5 files changed, 153 insertions(+)  
create mode 100644 src/if.c  
create mode 100644 src/if.h  
 
diff --git a/src/if.c b/src/if.c  
new file mode 100644  
index 0000000..db231aa  
--- /dev/null  
+++ b/src/if.c  
@@ -0,0 +1,113 @@  
+/*  
+ * $Id: if.c $  
+ *  
+ * Author: Markus Stenberg <fingon@iki.fi>  
+ *  
+ * Copyright (c) 2012 cisco Systems, Inc.  
+ *  
+ * Created: Tue Dec 4 14:50:34 2012 mstenber  
+ * Last modified: Wed Dec 5 18:51:08 2012 mstenber  
+ * Edit time: 24 min  
+ *  
+ */  
+  
+#include <sys/types.h>  
+#include <sys/socket.h>  
+#include <net/if.h>  
+  
+#include "if.h"  
+  
+#include "lauxlib.h"  
+  
+static int if_global_indextoname(lua_State *L);  
+static int if_global_nametoindex(lua_State *L);  
+static int if_global_nameindex(lua_State *L);  
+  
+static luaL_Reg func[] = {  
+ { "indextoname", if_global_indextoname},  
+ { "nametoindex", if_global_nametoindex},  
+ { "nameindex", if_global_nameindex},  
+ { NULL, NULL}  
+};  
+  
+int if_open(lua_State *L)  
+{  
+ lua_pushstring(L, "iface");  
+ lua_newtable(L);  
+ luaL_openlib(L, NULL, func, 0);  
+ lua_settable(L, -3);  
+ return 0;  
+}  
+  
+int if_global_indextoname(lua_State *L)  
+{  
+ unsigned int ifnumber;  
+ const char *name;  
+ char buf[IF_NAMESIZE+1];  
+  
+ if (!lua_isnumber(L, 1))  
+ {  
+ lua_pushnil(L);  
+ lua_pushstring(L, "indextoname expects only number argument");  
+ return 2;  
+ }  
+ ifnumber = lua_tonumber(L, 1);  
+ if (!(name = if_indextoname(ifnumber, buf)))  
+ {  
+ lua_pushnil(L);  
+ lua_pushstring(L, "nonexistent interface");  
+ return 2;  
+ }  
+ lua_pushstring(L, name);  
+ return 1;  
+}  
+  
+int if_global_nametoindex(lua_State *L)  
+{  
+ unsigned int ifnumber;  
+ if (!lua_isstring(L, 1))  
+ {  
+ lua_pushnil(L);  
+ lua_pushstring(L, "nametoindex expects only string argument");  
+ return 2;  
+ }  
+ if (!(ifnumber = if_nametoindex(lua_tostring(L, 1))))  
+ {  
+ lua_pushnil(L);  
+ lua_pushstring(L, "nonexistent interface");  
+ return 2;  
+ }  
+ lua_pushnumber(L, ifnumber);  
+ return 1;  
+}  
+  
+int if_global_nameindex(lua_State *L)  
+{  
+ struct if_nameindex *ni, *oni;  
+ int i = 1;  
+ oni = ni = if_nameindex();  
+ lua_newtable(L);  
+ while (ni && ni->if_index && *(ni->if_name))  
+ {  
+ /* at result[i], we store.. */  
+ lua_pushnumber(L, i);  
+  
+ /* new table with two items - index, name*/  
+ lua_newtable(L);  
+ lua_pushstring(L, "index");  
+ lua_pushnumber(L, ni->if_index);  
+ lua_settable(L, -3);  
+  
+ lua_pushstring(L, "name");  
+ lua_pushstring(L, ni->if_name);  
+ lua_settable(L, -3);  
+  
+ /* Then, actually store it */  
+ lua_settable(L, -3);  
+  
+ i++;  
+ ni++;  
+ }  
+ if_freenameindex(oni);  
+ return 1;  
+}  
diff --git a/src/if.h b/src/if.h  
new file mode 100644  
index 0000000..dc7faf8  
--- /dev/null  
+++ b/src/if.h  
@@ -0,0 +1,27 @@  
+/*  
+ * $Id: if.h $  
+ *  
+ * Author: Markus Stenberg <fingon@iki.fi>  
+ *  
+ * Copyright (c) 2012 cisco Systems, Inc.  
+ *  
+ * Created: Tue Dec 4 14:37:24 2012 mstenber  
+ * Last modified: Tue Dec 4 14:51:43 2012 mstenber  
+ * Edit time: 7 min  
+ *  
+ */  
+  
+/* This module provides Lua wrapping for the advanced socket API  
+ * defined in RFC3542, or mainly, the access to the system's interface  
+ * list. It is necessary for use of recvmsg/sendmsg.  
+ *  
+ * TODO - Do something clever with Windows?  
+ */  
+#ifndef IF_H  
+#define IF_H  
+  
+#include "lua.h"  
+  
+int if_open(lua_State *L);  
+  
+#endif /* IF_H */  
diff --git a/src/luasocket.c b/src/luasocket.c  
index e6ee747..85d41a6 100644  
--- a/src/luasocket.c  
+++ b/src/luasocket.c  
@@ -31,6 +31,7 @@  
#include "tcp.h"  
#include "udp.h"  
#include "select.h"  
+#include "if.h"  
 
/*-------------------------------------------------------------------------*\  
* Internal function prototypes  
@@ -51,6 +52,7 @@ static const luaL_Reg mod[] = {  
{"tcp", tcp_open},  
{"udp", udp_open},  
{"select", select_open},  
+ {"iface", if_open},  
{NULL, NULL}  
};  
 
diff --git a/src/makefile b/src/makefile  
index 8d3521e..09d4882 100644  
--- a/src/makefile  
+++ b/src/makefile  
@@ -262,6 +262,7 @@ SOCKET_OBJS= \  
auxiliar.$(O) \  
options.$(O) \  
inet.$(O) \  
+ if.$(O) \  
$(SOCKET) \  
except.$(O) \  
select.$(O) \  
@@ -387,6 +388,7 @@ auxiliar.$(O): auxiliar.c auxiliar.h  
buffer.$(O): buffer.c buffer.h io.h timeout.h  
except.$(O): except.c except.h  
inet.$(O): inet.c inet.h socket.h io.h timeout.h usocket.h  
+if.$(O): if.c if.h  
io.$(O): io.c io.h timeout.h  
luasocket.$(O): luasocket.c luasocket.h auxiliar.h except.h \  
timeout.h buffer.h io.h inet.h socket.h usocket.h tcp.h \  
diff --git a/src/options.c b/src/options.c  
index 8ac2a14..1c73e6f 100644  
--- a/src/options.c  
+++ b/src/options.c  
@@ -3,6 +3,9 @@  
* LuaSocket toolkit  
\*=========================================================================*/  
#include <string.h>  
+#include <sys/types.h>  
+#include <sys/socket.h>  
+#include <net/if.h>  
 
#include "lauxlib.h"  
 
@@ -285,6 +288,12 @@ static int opt_ip6_setmembership(lua_State *L, p_socket ps, int level, int name)  
if (!lua_isnil(L, -1)) {  
if (lua_isnumber(L, -1)) {  
val.ipv6mr_interface = (unsigned int) lua_tonumber(L, -1);  
+ } else if (lua_isstring(L, -1)) {  
+ if (!(val.ipv6mr_interface = if_nametoindex(lua_tostring(L, -1)))) {  
+ lua_pushnil(L);  
+ lua_pushstring(L, "nonexistent interface");  
+ return 2;  
+ }  
} else  
luaL_argerror(L, -1, "number 'interface' field expected");  
}  
--  
1.8.4.rc3  
 
 
file:a/libs/libexif/Makefile (deleted)
#  
# Copyright (C) 2006-2014 OpenWrt.org  
#  
# This is free software, licensed under the GNU General Public License v2.  
# See /LICENSE for more information.  
#  
 
include $(TOPDIR)/rules.mk  
 
PKG_NAME:=libexif  
PKG_VERSION:=0.6.21  
PKG_RELEASE:=1  
 
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2  
PKG_SOURCE_URL:=@SF/libexif  
PKG_MD5SUM:=27339b89850f28c8f1c237f233e05b27  
 
PKG_LICENSE:=LGPLv2.1  
PKG_LICENSE_FILES:=COPYING  
 
PKG_FIXUP:=autoreconf  
PKG_INSTALL:=1  
 
include $(INCLUDE_DIR)/package.mk  
 
define Package/libexif  
SECTION:=libs  
CATEGORY:=Libraries  
TITLE:=library for jpeg files with exif tags  
URL:=http://libexif.sourceforge.net/  
endef  
 
define Package/libexif/description  
libexif is a library for parsing, editing, and saving EXIF data. It is  
intended to replace lots of redundant implementations in command-line  
utilities and programs with GUIs.  
endef  
 
CONFIGURE_ARGS+= \  
--enable-shared \  
--enable-static \  
--disable-rpath \  
--without-libiconv-prefix \  
--without-libintl-prefix \  
 
TARGET_CFLAGS += $(FPIC)  
 
define Build/InstallDev  
$(INSTALL_DIR) $(1)/usr/include  
$(CP) $(PKG_INSTALL_DIR)/usr/include/libexif $(1)/usr/include/  
$(INSTALL_DIR) $(1)/usr/lib  
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libexif*.{a,so*} $(1)/usr/lib/  
$(INSTALL_DIR) $(1)/usr/lib/pkgconfig  
$(CP) $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/libexif.pc $(1)/usr/lib/pkgconfig/  
endef  
 
define Package/libexif/install  
$(INSTALL_DIR) $(1)/usr/lib  
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libexif*.so.* $(1)/usr/lib/  
endef  
 
$(eval $(call BuildPackage,libexif))  
 
--- a/Makefile.in  
+++ b/Makefile.in  
@@ -289,7 +289,7 @@ target_alias = @target_alias@  
top_build_prefix = @top_build_prefix@  
top_builddir = @top_builddir@  
top_srcdir = @top_srcdir@  
-SUBDIRS = m4m po libexif test doc binary contrib  
+SUBDIRS = m4m po libexif test binary contrib  
EXTRA_DIST = @PACKAGE_TARNAME@.spec README-Win32.txt libexif.pc.in \  
libexif-uninstalled.pc.in  
pkgconfigdir = $(libdir)/pkgconfig  
 
file:a/libs/libgcrypt/Makefile (deleted)
#  
# Copyright (C) 2005-2011 OpenWrt.org  
#  
# This is free software, licensed under the GNU General Public License v2.  
# See /LICENSE for more information.  
#  
 
include $(TOPDIR)/rules.mk  
 
PKG_NAME:=libgcrypt  
PKG_VERSION:=1.5.3  
PKG_RELEASE:=1  
 
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2  
PKG_SOURCE_URL:=ftp://ftp.gnupg.org/gcrypt/libgcrypt  
PKG_MD5SUM:=993159b2924ae7b0e4eaff0743c2db35  
 
PKG_FIXUP:=patch-libtool  
PKG_INSTALL:=1  
PKG_BUILD_PARALLEL:=1  
 
include $(INCLUDE_DIR)/package.mk  
 
define Package/libgcrypt  
SECTION:=libs  
CATEGORY:=Libraries  
DEPENDS:=+libgpg-error  
TITLE:=GNU crypto library  
URL:=http://directory.fsf.org/security/libgcrypt.html  
endef  
 
define Package/libgcrypt/description  
This is a general purpose cryptographic library based on the code from  
GnuPG. It provides functions for all cryptograhic building blocks:  
symmetric ciphers (AES, DES, Arcfour, CAST5), hash algorithms (MD5, SHA-1,  
RIPE-MD160, SHA-224/256, SHA-384/512), MACs (HMAC for all hash  
algorithms), public key algorithms (RSA, DSA), large integer functions,  
random numbers and a lot of supporting functions. Some algorithms have  
been disabled to reduce size (Blowfish, Twofish, Serpent,  
RC2, SEED, Camellia, CRC, MD4, TIGER-192, Whirlpool, ElGamal, ECC).  
endef  
 
CONFIGURE_ARGS += \  
--enable-shared \  
--enable-static \  
--disable-asm \  
--with-gpg-error-prefix="$(STAGING_DIR)/usr" \  
--enable-digests="md5 rmd160 sha1 sha256 sha512" \  
--enable-ciphers="arcfour des aes cast5" \  
--enable-pubkey-ciphers="rsa dsa"  
 
TARGET_CFLAGS += $(FPIC)  
 
define Build/InstallDev  
$(INSTALL_DIR) $(1)/usr/bin $(2)/bin $(1)/usr/include $(1)/usr/lib $(1)/usr/share/aclocal  
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/libgcrypt-config $(1)/usr/bin/  
$(CP) $(PKG_INSTALL_DIR)/usr/include/gcrypt*.h $(1)/usr/include/  
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libgcrypt.{la,a,so*} $(1)/usr/lib/  
$(CP) $(PKG_INSTALL_DIR)/usr/share/aclocal/libgcrypt.m4 $(1)/usr/share/aclocal/  
$(SED) 's,^libdir=\"$$$${exec_prefix}/lib,libdir=\"$(STAGING_DIR)/usr/lib,g' $(1)/usr/bin/libgcrypt-config  
$(SED) 's,^includedir=\"$$$${prefix}/include/,includedir=\"$(STAGING_DIR)/usr/include/,g' $(1)/usr/bin/libgcrypt-config  
ln -sf $(STAGING_DIR)/usr/bin/libgcrypt-config $(2)/bin/  
endef  
 
define Package/libgcrypt/install  
$(INSTALL_DIR) $(1)/usr/lib  
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libgcrypt.so.* $(1)/usr/lib/  
endef  
 
$(eval $(call BuildPackage,libgcrypt))  
 
#  
# Copyright (C) 2005-2011 OpenWrt.org  
#  
# This is free software, licensed under the GNU General Public License v2.  
# See /LICENSE for more information.  
#  
 
include $(TOPDIR)/rules.mk  
 
PKG_NAME:=libgpg-error  
PKG_VERSION:=1.9  
PKG_RELEASE:=1  
 
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2  
PKG_SOURCE_URL:=ftp://ftp.gnupg.org/gcrypt/libgpg-error  
PKG_MD5SUM:=521b98aa9395e7eaf0ef2236233a0796  
 
PKG_BUILD_PARALLEL:=1  
PKG_FIXUP:=autoreconf  
PKG_INSTALL:=1  
 
include $(INCLUDE_DIR)/package.mk  
 
define Package/libgpg-error  
SECTION:=libs  
CATEGORY:=Libraries  
TITLE:=GnuPG error handling helper library  
URL:=http://www.gnupg.org/related_software/libgpg-error/  
endef  
 
define Package/libgpg-error/description  
An helper library for common error codes and descriptions.  
This is a library that defines common error values for all GnuPG  
components. Among these are GPG, GPGSM, GPGME, GPG-Agent, libgcrypt,  
Libksba, DirMngr, Pinentry, SmartCard Daemon and possibly more in the  
future.  
endef  
 
TARGET_CFLAGS += $(FPIC)  
 
CONFIGURE_ARGS += \  
--enable-shared \  
--enable-static \  
--disable-rpath  
 
define Build/InstallDev  
$(INSTALL_DIR) $(2)/bin $(1)/usr/bin  
$(INSTALL_BIN) \  
$(PKG_INSTALL_DIR)/usr/bin/gpg-error-config \  
$(2)/bin/  
$(SED) \  
's,^\(prefix\|exec_prefix\)=.*,\1=$(STAGING_DIR)/usr,g' \  
$(2)/bin/gpg-error-config  
ln -sf $(STAGING_DIR)/host/bin/gpg-error-config $(1)/usr/bin/gpg-error-config  
 
$(INSTALL_DIR) $(1)/usr/include  
$(INSTALL_DATA) \  
$(PKG_INSTALL_DIR)/usr/include/gpg-error.h \  
$(1)/usr/include/  
 
$(INSTALL_DIR) $(1)/usr/lib  
$(CP) \  
$(PKG_INSTALL_DIR)/usr/lib/libgpg-error.{la,a,so*} \  
$(1)/usr/lib/  
 
$(INSTALL_DIR) $(1)/usr/share/aclocal  
$(INSTALL_DATA) \  
$(PKG_INSTALL_DIR)/usr/share/aclocal/gpg-error.m4 \  
$(1)/usr/share/aclocal/  
endef  
 
define Package/libgpg-error/install  
$(INSTALL_DIR) $(1)/usr/lib  
$(CP) \  
$(PKG_INSTALL_DIR)/usr/lib/libgpg-error.so.* \  
$(1)/usr/lib/  
endef  
 
$(eval $(call BuildPackage,libgpg-error))  
 
file:a/libs/libmpeg2/Makefile (deleted)
#  
# Copyright (C) 2011 OpenWrt.org  
#  
# This is free software, licensed under the GNU General Public License v2.  
# See /LICENSE for more information.  
#  
 
include $(TOPDIR)/rules.mk  
 
PKG_NAME:=libmpeg2  
PKG_VERSION:=0.5.1  
PKG_RELEASE:=1  
 
PKG_SOURCE:=libmpeg2-$(PKG_VERSION).tar.gz  
PKG_SOURCE_URL:=http://libmpeg2.sourceforge.net/files/  
PKG_MD5SUM:=0f92c7454e58379b4a5a378485bbd8ef  
 
PKG_INSTALL:=1  
 
include $(INCLUDE_DIR)/package.mk  
 
define Package/libmpeg2  
SECTION:=libs  
CATEGORY:=Libraries  
TITLE:=MPEG-1 & -2 decoding library  
URL:=http://libmpeg2.sourceforge.net/  
MAINTAINER:=W. Michael Petullo <mike@flyn.org>  
endef  
 
define Package/libmpeg2/decription  
Libmpeg2 is a library for decoding MPEG-1 and MPEG-2 video streams  
endef  
 
CONFIGURE_ARGS += \  
--disable-sdl \  
--without-x \  
 
define Build/InstallDev  
$(INSTALL_DIR) $(1)/usr/include  
$(CP) \  
$(PKG_INSTALL_DIR)/usr/include/mpeg2dec \  
$(1)/usr/include/  
$(INSTALL_DIR) $(1)/usr/lib  
$(CP) \  
$(PKG_INSTALL_DIR)/usr/lib/libmpeg2{,convert}.{a,so*} \  
$(1)/usr/lib/  
$(INSTALL_DIR) $(1)/usr/lib/pkgconfig  
$(INSTALL_DATA) \  
$(PKG_INSTALL_DIR)/usr/lib/pkgconfig/libmpeg2{,convert}.pc \  
$(1)/usr/lib/pkgconfig/  
endef  
 
define Package/libmpeg2/install  
$(INSTALL_DIR) $(1)/usr/lib  
$(CP) \  
$(PKG_INSTALL_DIR)/usr/lib/libmpeg2{,convert}.so.* \  
$(1)/usr/lib/  
endef  
 
$(eval $(call BuildPackage,libmpeg2))  
 
--- a/libmpeg2/motion_comp_altivec.c  
+++ b/libmpeg2/motion_comp_altivec.c  
@@ -25,6 +25,8 @@  
 
#ifdef ARCH_PPC  
 
+#ifdef __I_WANT_ALTIVEC__  
+  
#ifdef HAVE_ALTIVEC_H  
#include <altivec.h>  
#endif  
@@ -1007,4 +1009,6 @@ static void MC_avg_xy_8_altivec (uint8_t  
 
MPEG2_MC_EXTERN (altivec)  
 
+#endif /* __I_WANT_ALTIVEC__ */  
+  
#endif  
--- a/libmpeg2/idct_altivec.c  
+++ b/libmpeg2/idct_altivec.c  
@@ -25,6 +25,8 @@  
 
#ifdef ARCH_PPC  
 
+#ifdef __I_WANT_ALTIVEC__  
+  
#ifdef HAVE_ALTIVEC_H  
#include <altivec.h>  
#endif  
@@ -283,4 +285,6 @@ void mpeg2_idct_altivec_init (void)  
}  
}  
 
+#endif /* __I_WANT_ALTIVEC__ */  
+  
#endif  
--- a/libmpeg2/idct.c  
+++ b/libmpeg2/idct.c  
@@ -251,11 +251,13 @@ void mpeg2_idct_init (uint32_t accel)  
} else  
#endif  
#ifdef ARCH_PPC  
+#ifdef __I_WANT_ALTIVEC__  
if (accel & MPEG2_ACCEL_PPC_ALTIVEC) {  
mpeg2_idct_copy = mpeg2_idct_copy_altivec;  
mpeg2_idct_add = mpeg2_idct_add_altivec;  
mpeg2_idct_altivec_init ();  
} else  
+#endif /* __I_WANT_ALTIVEC__ */  
#endif  
#ifdef ARCH_ALPHA  
if (accel & MPEG2_ACCEL_ALPHA_MVI) {  
--- a/libmpeg2/motion_comp.c  
+++ b/libmpeg2/motion_comp.c  
@@ -43,9 +43,11 @@ void mpeg2_mc_init (uint32_t accel)  
else  
#endif  
#ifdef ARCH_PPC  
+#ifdef __I_WANT_ALTIVEC__  
if (accel & MPEG2_ACCEL_PPC_ALTIVEC)  
mpeg2_mc = mpeg2_mc_altivec;  
else  
+#endif /* __I_WANT_ALTIVEC__ */  
#endif  
#ifdef ARCH_ALPHA  
if (accel & MPEG2_ACCEL_ALPHA)  
 
diff -urN libmpeg2-0.5.1/libmpeg2/motion_comp_arm_s.S libmpeg2-0.5.1.new/libmpeg2/motion_comp_arm_s.S  
--- libmpeg2-0.5.1/libmpeg2/motion_comp_arm_s.S 2008-07-09 21:16:05.000000000 +0200  
+++ libmpeg2-0.5.1.new/libmpeg2/motion_comp_arm_s.S 2012-07-30 15:22:58.664964215 +0200  
@@ -19,6 +19,15 @@  
@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA  
 
 
+@ Data preload is supported only by ARM V5TE and above  
+  
+#if (defined (__ARM_ARCH_2__) || defined (__ARM_ARCH_3__) \  
+ || defined (__ARM_ARCH_3M__) || defined (__ARM_ARCH_4__) \  
+ || defined (__ARM_ARCH_4T__) || defined (__ARM_ARCH_5__) \  
+ || defined (__ARM_ARCH_5T__))  
+.macro pld reg  
+.endm  
+#endif  
.text  
 
@ ----------------------------------------------------------------  
 
file:a/libs/liboil/Makefile (deleted)
#  
# Copyright (C) 2007-2010 OpenWrt.org  
#  
# This is free software, licensed under the GNU General Public License v2.  
# See /LICENSE for more information.  
#  
 
include $(TOPDIR)/rules.mk  
 
PKG_NAME:=liboil  
PKG_VERSION:=0.3.17  
PKG_RELEASE:=1  
 
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz  
PKG_SOURCE_URL:=http://liboil.freedesktop.org/download/  
PKG_MD5SUM:=47dc734f82faeb2964d97771cfd2e701  
 
PKG_FIXUP:=autoreconf  
PKG_INSTALL:=1  
 
include $(INCLUDE_DIR)/package.mk  
 
define Package/liboil  
SECTION:=libs  
CATEGORY:=Libraries  
TITLE:=simple functions optimized for various CPUs  
URL:=http://liboil.freedesktop.org/wiki/  
DEPENDS:=+librt  
endef  
 
define Package/liboil/description  
Liboil is a library of simple functions that are optimized for various CPUs.  
These functions are generally loops implementing simple algorithms, such as  
converting an array of N integers to floating-point numbers or multiplying  
and summing an array of N numbers. Such functions are candidates for significant  
optimization using various techniques, especially by using extended instructions  
provided by modern CPUs (Altivec, MMX, SSE, etc.).  
endef  
 
CONFIGURE_ARGS += \  
--enable-shared \  
--enable-static \  
 
TARGET_CFLAGS += $(FPIC)  
 
# XXX: VFP_CFLAGS is set to '-mfpu=vfp' on arm by configure, but that breaks  
# final linking stages, so override it until we find why  
MAKE_FLAGS += \  
VFP_CFLAGS="" \  
 
define Build/InstallDev  
$(INSTALL_DIR) $(1)/usr/include  
$(CP) $(PKG_INSTALL_DIR)/usr/include/liboil-0.3/* $(1)/usr/include/  
$(INSTALL_DIR) $(1)/usr/lib  
$(CP) $(PKG_INSTALL_DIR)/usr/lib/liboil-0.3.{a,so*} $(1)/usr/lib/  
$(INSTALL_DIR) $(1)/usr/lib/pkgconfig  
$(CP) $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/liboil-0.3.pc $(1)/usr/lib/pkgconfig/  
endef  
 
define Package/liboil/install  
$(INSTALL_DIR) $(1)/usr/lib  
$(CP) $(PKG_INSTALL_DIR)/usr/lib/liboil-0.3.so.* $(1)/usr/lib/  
endef  
 
$(eval $(call BuildPackage,liboil))  
 
--- a/Makefile.am  
+++ b/Makefile.am  
@@ -1,7 +1,7 @@  
 
AUTOMAKE_OPTIONS = foreign  
 
-SUBDIRS = liboil testsuite examples doc  
+SUBDIRS = liboil  
 
EXTRA_DIST = COPYING autogen.sh gtk-doc.make HACKING BUG-REPORTING  
 
--- a/Makefile.in  
+++ b/Makefile.in  
@@ -278,7 +278,7 @@ top_build_prefix = @top_build_prefix@  
top_builddir = @top_builddir@  
top_srcdir = @top_srcdir@  
AUTOMAKE_OPTIONS = foreign  
-SUBDIRS = liboil testsuite examples doc  
+SUBDIRS = liboil  
EXTRA_DIST = COPYING autogen.sh gtk-doc.make HACKING BUG-REPORTING  
DISTCHECK_CONFIGURE_FLAGS = --enable-gtk-doc  
pkgconfig_DATA = liboil-$(LIBOIL_MAJORMINOR).pc  
 
--- a/liboil.pc.in  
+++ b/liboil.pc.in  
@@ -1,7 +1,7 @@  
prefix=@prefix@  
exec_prefix=@exec_prefix@  
libdir=@libdir@  
-includedir=@includedir@/liboil-@LIBOIL_MAJORMINOR@  
+includedir=@includedir@  
toolsdir=${exec_prefix}/bin  
 
 
@@ -9,6 +9,6 @@ Name: liboil-@LIBOIL_MAJORMINOR@  
Description: Library of Optimized Inner Loops  
Version: @VERSION@  
Libs: -L${libdir} -loil-@LIBOIL_MAJORMINOR@ @LIBM@ @LIBRT@  
-Cflags: -I${includedir}  
+Cflags: -I${includedir}/liboil-@LIBOIL_MAJORMINOR@  
 
 
 
file:a/libs/libosip2/Makefile (deleted)
#  
# Copyright (C) 2006-2011 OpenWrt.org  
#  
# This is free software, licensed under the GNU General Public License v2.  
# See /LICENSE for more information.  
#  
 
include $(TOPDIR)/rules.mk  
 
PKG_NAME:=libosip2  
PKG_VERSION:=3.5.0  
PKG_RELEASE:=1  
 
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz  
PKG_SOURCE_URL:=@GNU/osip  
PKG_MD5SUM:=7691546f6b3349d10007fc1aaff0f4e0  
 
PKG_FIXUP:=autoreconf  
PKG_INSTALL:=1  
PKG_BUILD_PARALLEL:=1  
 
include $(INCLUDE_DIR)/package.mk  
 
define Package/libosip2  
SECTION:=libs  
CATEGORY:=Libraries  
TITLE:=GNU oSIP library  
URL:=http://www.gnu.org/software/osip/  
DEPENDS:=+libpthread  
endef  
 
define Package/libosip2description  
GNU oSIP library, a Session Initiation Protocol (SIP) implementation.  
endef  
 
TARGET_CFLAGS += $(FPIC)  
 
define Build/Configure  
$(call Build/Configure/Default, \  
--enable-shared \  
--enable-static \  
--disable-debug \  
--disable-trace \  
--enable-pthread \  
--enable-semaphore \  
)  
endef  
 
define Build/InstallDev  
$(INSTALL_DIR) $(1)/usr/include  
$(CP) $(PKG_INSTALL_DIR)/usr/include/osip{,parser}2 $(1)/usr/include/  
$(INSTALL_DIR) $(1)/usr/lib  
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libosip{,parser}2.{a,so*} $(1)/usr/lib/  
$(INSTALL_DIR) $(1)/usr/lib/pkgconfig  
$(CP) $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/libosip2.pc $(1)/usr/lib/pkgconfig/  
endef  
 
define Package/libosip2/install  
$(INSTALL_DIR) $(1)/usr/lib  
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libosip{,parser}2.so $(PKG_INSTALL_DIR)/usr/lib/libosip{,parser}2.so.* $(1)/usr/lib/  
endef  
 
$(eval $(call BuildPackage,libosip2))  
 
--- a/Makefile.am  
+++ b/Makefile.am  
@@ -1,3 +1,5 @@  
+ACLOCAL_AMFLAGS = -I scripts  
+  
EXTRA_DIST = README BUGS FEATURES HISTORY autogen.sh libosip2.pc.in  
 
SUBDIRS = include src scripts help platform  
 
file:a/libs/libtheora/Makefile (deleted)
#  
# Copyright (C) 2008-2012 OpenWrt.org  
#  
# This is free software, licensed under the GNU General Public License v2.  
# See /LICENSE for more information.  
#  
 
include $(TOPDIR)/rules.mk  
 
PKG_NAME:=libtheora  
PKG_VERSION:=1.1.1  
PKG_RELEASE:=1  
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2  
PKG_SOURCE_URL:=http://downloads.xiph.org/releases/theora/  
PKG_MD5SUM:=292ab65cedd5021d6b7ddd117e07cd8e  
PKG_FIXUP:=autoreconf  
 
PKG_BUILD_DEPENDS:=libvorbis  
 
include $(INCLUDE_DIR)/package.mk  
 
PKG_INSTALL=1  
 
define Package/libtheora  
SECTION:=libs  
CATEGORY:=Libraries  
TITLE:=libtheora  
URL:=http://xiph.org/theora/  
DEPENDS:=+libogg  
endef  
 
define Package/libtheora/description  
Theora is Xiph.Org's first publicly released video codec, intended  
for use within the Foundation's Ogg multimedia streaming system.  
Theora is derived directly from On2's VP3 codec; Currently the  
encoders are nearly identical, but Theora will make use of new  
features supported by the decoder to improve over what is  
is possible with VP3.  
endef  
 
define Build/Configure  
$(call Build/Configure/Default, \  
--disable-examples \  
--disable-oggtest \  
--disable-vorbistest \  
--disable-sdltest \  
)  
endef  
 
define Build/InstallDev  
$(INSTALL_DIR) $(1)/usr/include/theora/  
$(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/include/theora/* $(1)/usr/include/theora/  
$(INSTALL_DIR) $(1)/usr/lib/  
$(CP) $(PKG_INSTALL_DIR)/usr/lib/*.{so*,a,la} $(1)/usr/lib/  
$(INSTALL_DIR) $(1)/usr/lib/pkgconfig/  
$(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/* $(1)/usr/lib/pkgconfig/  
endef  
 
define Package/libtheora/install  
$(INSTALL_DIR) $(1)/usr/lib/  
$(CP) $(PKG_INSTALL_DIR)/usr/lib/*.so* $(1)/usr/lib/  
endef  
 
$(eval $(call BuildPackage,libtheora))  
 
diff -urN libtheora-1.1.1/Makefile.am libtheora-1.1.1.new/Makefile.am  
--- libtheora-1.1.1/Makefile.am 2009-07-14 01:55:02.000000000 +0200  
+++ libtheora-1.1.1.new/Makefile.am 2012-12-05 14:21:06.103521554 +0100  
@@ -8,7 +8,7 @@  
EXAMPLES_DIR =  
endif  
 
-SUBDIRS = lib include doc tests m4 $(EXAMPLES_DIR)  
+SUBDIRS = lib include m4 $(EXAMPLES_DIR)  
 
 
# we include the whole debian/ dir in EXTRA_DIST because there's a problem  
diff -urN libtheora-1.1.1/Makefile.in libtheora-1.1.1.new/Makefile.in  
--- libtheora-1.1.1/Makefile.in 2009-10-01 20:04:07.000000000 +0200  
+++ libtheora-1.1.1.new/Makefile.in 2012-12-05 14:21:18.239521864 +0100  
@@ -164,7 +164,7 @@  
@THEORA_ENABLE_EXAMPLES_TRUE@EXAMPLES_DIR = examples  
@THEORA_ENABLE_EXAMPLES_FALSE@EXAMPLES_DIR =  
 
-SUBDIRS = lib include doc tests m4 $(EXAMPLES_DIR)  
+SUBDIRS = lib include m4 $(EXAMPLES_DIR)  
 
# we include the whole debian/ dir in EXTRA_DIST because there's a problem  
# with autotools and HFS+ MacOSX file systems that caused debian/Makefile.am  
@@ -200,7 +200,7 @@  
missing mkinstalldirs theora-uninstalled.pc.in theora.pc.in \  
theoradec-uninstalled.pc.in theoradec.pc.in \  
theoraenc-uninstalled.pc.in theoraenc.pc.in  
-DIST_SUBDIRS = lib include doc tests m4 examples  
+DIST_SUBDIRS = lib include m4 examples  
all: config.h  
$(MAKE) $(AM_MAKEFLAGS) all-recursive  
 
 
--- libtheora-1.1.1/configure.ac 2009-10-01 20:00:33.000000000 +0200  
+++ libtheora-1.1.1.new/configure.ac 2012-12-05 14:22:26.319523608 +0100  
@@ -313,11 +313,6 @@  
dnl check for SDL  
HAVE_SDL=no  
 
-AM_PATH_SDL(,[  
- HAVE_SDL=yes  
- SDL_LIBS=`$SDL_CONFIG --libs`  
-],AC_MSG_WARN([*** Unable to find SDL -- Not compiling example players ***]))  
-  
dnl check for OSS  
HAVE_OSS=no  
AC_CHECK_HEADERS([sys/soundcard.h soundcard.h machine/soundcard.h],[  
 
file:a/libs/libxml2/Makefile (deleted)
#  
# Copyright (C) 2006-2012 OpenWrt.org  
#  
# This is free software, licensed under the GNU General Public License v2.  
# See /LICENSE for more information.  
#  
 
include $(TOPDIR)/rules.mk  
 
PKG_NAME:=libxml2  
PKG_VERSION:=2.9.1  
PKG_RELEASE:=1  
 
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz  
PKG_SOURCE_URL:=http://gd.tuwien.ac.at/languages/libxml/ \  
http://xmlsoft.org/sources/ \  
ftp://fr.rpmfind.net/pub/libxml/  
PKG_MD5SUM:=9c0cfef285d5c4a5c80d00904ddab380  
 
PKG_LICENSE:=MIT  
PKG_LICENSE_FILES:=COPYING  
 
PKG_FIXUP:=autoreconf  
PKG_INSTALL:=1  
PKG_BUILD_PARALLEL:=1  
 
include $(INCLUDE_DIR)/package.mk  
 
define Package/libxml2  
SECTION:=libs  
CATEGORY:=Libraries  
TITLE:=Gnome XML library  
URL:=http://xmlsoft.org/  
DEPENDS:=+libpthread +zlib  
endef  
 
define Package/libxml2/description  
A library for manipulating XML and HTML resources.  
endef  
 
TARGET_CFLAGS += $(FPIC)  
 
CONFIGURE_ARGS += \  
--enable-shared \  
--enable-static \  
--with-c14n \  
--without-catalog \  
--with-debug \  
--without-docbook \  
--with-html \  
--without-ftp \  
--without-http \  
--without-iconv \  
--without-iso8859x \  
--without-legacy \  
--with-output \  
--without-pattern \  
--without-push \  
--without-python \  
--with-reader \  
--without-readline \  
--without-regexps \  
--with-sax1 \  
--with-schemas \  
--with-threads \  
--with-tree \  
--with-valid \  
--with-writer \  
--with-xinclude \  
--with-xpath \  
--with-xptr \  
--with-zlib \  
--without-lzma  
 
define Build/InstallDev  
$(INSTALL_DIR) $(2)/bin  
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/xml2-config $(2)/bin/  
$(SED) 's,^\(prefix\|exec_prefix\)=.*,\1=$(STAGING_DIR)/usr,g' $(2)/bin/xml2-config  
 
$(INSTALL_DIR) $(1)/usr/include  
$(CP) \  
$(PKG_INSTALL_DIR)/usr/include/libxml2 \  
$(1)/usr/include/  
 
$(INSTALL_DIR) $(1)/usr/lib  
$(CP) \  
$(PKG_INSTALL_DIR)/usr/lib/libxml2.{la,a,so*} \  
$(1)/usr/lib/  
 
$(INSTALL_DIR) $(1)/usr/lib/pkgconfig  
$(INSTALL_DATA) \  
$(PKG_INSTALL_DIR)/usr/lib/pkgconfig/libxml-2.0.pc \  
$(1)/usr/lib/pkgconfig/  
 
$(INSTALL_DIR) $(2)/share/aclocal/  
$(INSTALL_DATA) \  
$(PKG_INSTALL_DIR)/usr/share/aclocal/* \  
$(2)/share/aclocal  
endef  
 
define Package/libxml2/install  
$(INSTALL_DIR) $(1)/usr/lib  
$(CP) \  
$(PKG_INSTALL_DIR)/usr/lib/libxml2.so.* \  
$(1)/usr/lib/  
endef  
 
 
$(eval $(call BuildPackage,libxml2))  
 
file:a/libs/libxslt/Makefile (deleted)
#  
# Copyright (C) 2006-2011 OpenWrt.org  
#  
# This is free software, licensed under the GNU General Public License v2.  
# See /LICENSE for more information.  
#  
 
include $(TOPDIR)/rules.mk  
 
PKG_NAME:=libxslt  
PKG_VERSION:=1.1.28  
PKG_RELEASE:=1  
 
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz  
PKG_SOURCE_URL:=http://xmlsoft.org/sources/ \  
ftp://fr.rpmfind.net/pub/libxml/  
PKG_MD5SUM:=9667bf6f9310b957254fdcf6596600b7  
 
PKG_FIXUP:=autoreconf  
PKG_INSTALL:=1  
 
include $(INCLUDE_DIR)/package.mk  
 
define Package/libxslt  
SECTION:=libs  
CATEGORY:=Libraries  
DEPENDS:=+libxml2  
TITLE:=Gnome XSLT library  
URL:=http://xmlsoft.org/XSLT/  
endef  
 
define Package/libxslt/description  
A library for XML transformation using XSLT.  
endef  
 
define Package/libexslt  
SECTION:=libs  
CATEGORY:=Libraries  
DEPENDS:=+libxslt  
TITLE:=Gnome XSLT library Extention  
URL:=http://xmlsoft.org/XSLT/EXSLT/  
endef  
 
define Package/libexslt/description  
A extention for XSLT.  
endef  
 
define Package/xsltproc  
SECTION:=utils  
CATEGORY:=Utilities  
DEPENDS:=+libxml2 +libxslt +libexslt  
TITLE:=Gnome XSLT xsltproc Utility  
URL:=http://xmlsoft.org/XSLT/  
endef  
 
define Package/xsltproc/description  
XSLT XML transformation utility  
endef  
 
CONFIGURE_ARGS+= \  
--enable-shared \  
--enable-static \  
--without-python \  
--without-crypto \  
--without-debug \  
--without-mem-debug \  
--without-debugger \  
 
TARGET_CFLAGS += $(FPIC)  
 
define Build/InstallDev/Xslt  
$(INSTALL_DIR) $(1)/usr/bin $(2)/bin $(1)/usr/include/libxslt \  
$(1)/usr/include/libexslt $(1)/usr/lib \  
$(1)/usr/lib/pkgconfig $(2)/share/aclocal  
 
$(INSTALL_BIN) \  
$(PKG_INSTALL_DIR)/usr/bin/xslt-config \  
$(2)/bin/  
 
ln -sf $(STAGING_DIR)/host/bin/xslt-config $(1)/usr/bin/xslt-config  
 
$(SED) \  
's,^\(prefix\|exec_prefix\)=.*,\1=$(STAGING_DIR)/usr,g' \  
$(2)/bin/xslt-config  
 
$(INSTALL_DATA) \  
$(PKG_INSTALL_DIR)/usr/include/libxslt/* \  
$(1)/usr/include/libxslt/  
 
$(CP) \  
$(PKG_INSTALL_DIR)/usr/lib/libxslt.{la,a,so*} \  
$(1)/usr/lib/  
 
$(INSTALL_DATA) \  
$(PKG_INSTALL_DIR)/usr/lib/pkgconfig/libxslt.pc \  
$(1)/usr/lib/pkgconfig/  
 
$(INSTALL_DATA) \  
$(PKG_INSTALL_DIR)/usr/share/aclocal/* \  
$(2)/share/aclocal  
endef  
 
define Build/InstallDev/Exslt  
$(INSTALL_DIR) $(1)/usr/include/libexslt $(1)/usr/lib/pkgconfig  
$(INSTALL_DATA) \  
$(PKG_INSTALL_DIR)/usr/include/libexslt/* \  
$(1)/usr/include/libexslt/  
 
$(CP) \  
$(PKG_INSTALL_DIR)/usr/lib/libexslt.{la,a,so*} \  
$(1)/usr/lib/  
 
$(INSTALL_DATA) \  
$(PKG_INSTALL_DIR)/usr/lib/pkgconfig/libexslt.pc \  
$(1)/usr/lib/pkgconfig/  
endef  
 
define Build/InstallDev  
$(if $(CONFIG_PACKAGE_libxslt),$(call Build/InstallDev/Xslt,$(1),$(2)))  
$(if $(CONFIG_PACKAGE_libexslt),$(call Build/InstallDev/Exslt,$(1),$(2)))  
endef  
 
define Package/libxslt/install  
$(INSTALL_DIR) $(1)/usr/lib  
$(CP) \  
$(PKG_INSTALL_DIR)/usr/lib/libxslt.so.* \  
$(1)/usr/lib/  
endef  
 
define Package/libexslt/install  
$(INSTALL_DIR) $(1)/usr/lib  
$(CP) \  
$(PKG_INSTALL_DIR)/usr/lib/libexslt.so.* \  
$(1)/usr/lib/  
endef  
 
define Package/xsltproc/install  
$(INSTALL_DIR) $(1)/usr/bin  
$(INSTALL_BIN) \  
$(PKG_INSTALL_DIR)/usr/bin/xsltproc \  
$(1)/usr/bin/  
endef  
 
$(eval $(call BuildPackage,libxslt))  
$(eval $(call BuildPackage,libexslt))  
$(eval $(call BuildPackage,xsltproc))  
 
file:a/libs/tiff/Makefile (deleted)
#  
# Copyright (C) 2006-2012 OpenWrt.org  
#  
# This is free software, licensed under the GNU General Public License v2.  
# See /LICENSE for more information.  
#  
# blogic@openwrt.org  
 
include $(TOPDIR)/rules.mk  
 
PKG_NAME:=tiff  
PKG_VERSION:=4.0.3  
PKG_RELEASE:=1  
 
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz  
PKG_SOURCE_URL:=http://download.osgeo.org/libtiff  
PKG_MD5SUM:=051c1068e6a0627f461948c365290410  
 
PKG_FIXUP:=autoreconf  
PKG_REMOVE_FILES:=autogen.sh aclocal.m4  
 
PKG_INSTALL:=1  
 
PKG_CONFIG_DEPENDS:=CONFIG_PACKAGE_libtiffxx  
 
include $(INCLUDE_DIR)/uclibc++.mk  
include $(INCLUDE_DIR)/package.mk  
 
define Package/tiff/Default  
TITLE:=TIFF  
URL:=http://www.remotesensing.org/libtiff/  
endef  
 
define Package/libtiff  
$(call Package/tiff/Default)  
SECTION:=libs  
CATEGORY:=Libraries  
TITLE+= library  
DEPENDS:=+zlib +libjpeg  
endef  
 
define Package/libtiffxx  
$(call Package/tiff/Default)  
SECTION:=libs  
CATEGORY:=Libraries  
TITLE+= library(c++ bindings)  
DEPENDS:=+libtiff $(CXX_DEPENDS)  
endef  
 
define Package/tiff-utils  
$(call Package/tiff/Default)  
SECTION:=utils  
CATEGORY:=Utilities  
TITLE+= utilities  
DEPENDS:=+libtiff  
endef  
 
TARGET_CFLAGS += $(FPIC)  
 
define Build/Configure  
$(call Build/Configure/Default, \  
$(if $(CONFIG_PACKAGE_libtiffxx), \  
--enable-cxx, \  
--disable-cxx \  
) \  
--disable-lzma \  
--enable-ccitt \  
--enable-packbits \  
--enable-lzw \  
--enable-thunder \  
--enable-next \  
--enable-logluv \  
--enable-mdi \  
--enable-zlib \  
--enable-jpeg \  
--disable-old-jpeg \  
--disable-jbig \  
--without-x \  
)  
endef  
 
define Build/InstallDev  
$(INSTALL_DIR) $(1)/usr/{lib,include}  
$(CP) $(PKG_INSTALL_DIR)/usr/lib/lib* $(1)/usr/lib/  
$(CP) $(PKG_INSTALL_DIR)/usr/include/* $(1)/usr/include/  
endef  
 
define Package/libtiff/install  
$(INSTALL_DIR) $(1)/usr/lib  
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libtiff.so.* $(1)/usr/lib/  
endef  
 
define Package/libtiffxx/install  
$(INSTALL_DIR) $(1)/usr/lib  
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libtiffxx.so.* $(1)/usr/lib/  
endef  
 
define Package/tiff-utils/install  
$(INSTALL_DIR) $(1)/usr/bin  
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/* $(1)/usr/bin/  
endef  
 
$(eval $(call BuildPackage,libtiff))  
$(eval $(call BuildPackage,libtiffxx))  
$(eval $(call BuildPackage,tiff-utils))  
 
--- a/Makefile.am  
+++ b/Makefile.am  
@@ -25,7 +25,7 @@  
 
docdir = $(LIBTIFF_DOCDIR)  
 
-AUTOMAKE_OPTIONS = 1.12 dist-zip foreign  
+AUTOMAKE_OPTIONS = dist-zip foreign  
ACLOCAL_AMFLAGS = -I m4  
 
docfiles = \  
@@ -48,7 +48,7 @@ EXTRA_DIST = \  
 
dist_doc_DATA = $(docfiles)  
 
-SUBDIRS = port libtiff tools build contrib test man html  
+SUBDIRS = port libtiff tools build contrib  
 
release:  
(rm -f $(top_srcdir)/RELEASE-DATE && echo $(LIBTIFF_RELEASE_DATE) > $(top_srcdir)/RELEASE-DATE)  
--- a/test/Makefile.am  
+++ b/test/Makefile.am  
@@ -23,7 +23,7 @@  
 
# Process this file with automake to produce Makefile.in.  
 
-AUTOMAKE_OPTIONS = 1.12 color-tests parallel-tests foreign  
+AUTOMAKE_OPTIONS = color-tests parallel-tests foreign  
 
LIBTIFF = $(top_builddir)/libtiff/libtiff.la  
 
 
file:a/net/krb5/Makefile (deleted)
include $(TOPDIR)/rules.mk  
 
PKG_NAME:=krb5  
PKG_VERSION:=1.11  
PKG_RELEASE:=1  
 
PKG_SOURCE:=krb5-$(PKG_VERSION)-signed.tar  
PKG_SOURCE_URL:=http://web.mit.edu/kerberos/dist/krb5/$(PKG_VERSION)/  
PKG_MD5SUM:=1a13c53899806c4da99a798a04d25545  
 
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)  
 
PKG_BUILD_PARALLEL:=1  
PKG_INSTALL:=1  
 
include $(INCLUDE_DIR)/package.mk  
 
MAKE_PATH:=src  
 
define Package/krb5/Default  
SECTION:=net  
CATEGORY:=Network  
TITLE:=Kerberos  
URL:=http://web.mit.edu/kerberos/  
MAINTAINER:=W. Michael Petullo <mike@flyn.org>  
endef  
 
define Package/krb5-libs  
SECTION:=net  
CATEGORY:=Network  
TITLE:=Kerberos  
DEPENDS:=+libncurses  
TITLE:=Kerberos 5 Shared Libraries  
URL:=http://web.mit.edu/kerberos/  
MAINTAINER:=W. Michael Petullo <mike@flyn.org>  
endef  
 
define Package/krb5-server  
$(call Package/krb5/Default)  
DEPENDS:=+krb5-libs +libpthread  
TITLE:=Kerberos 5 Server  
endef  
 
define Package/krb5-client  
$(call Package/krb5/Default)  
DEPENDS:=+krb5-libs  
TITLE:=Kerberos 5 Client  
endef  
 
define Package/krb5/description  
Kerberos  
endef  
 
define Build/Prepare  
# Krb5 tarball contains signature and a second tarball  
# containing source code.  
tar xf "$(DL_DIR)/$(PKG_SOURCE)" -C "$(BUILD_DIR)"  
tar xzf "$(BUILD_DIR)/krb5-$(PKG_VERSION).tar.gz" -C "$(BUILD_DIR)"  
patch -p1 -d "$(PKG_BUILD_DIR)" < "$(PATCH_DIR)/001-fix-build-warning.patch"  
endef  
 
CONFIGURE_PATH = ./src  
 
CONFIGURE_VARS += \  
cross_compiling=yes \  
krb5_cv_attr_constructor_destructor=yes,yes \  
ac_cv_func_regcomp=yes \  
ac_cv_printf_positional=yes \  
ac_cv_file__etc_environment=no \  
ac_cv_file__etc_TIMEZONE=no  
 
CONFIGURE_ARGS += \  
--without-tcl \  
--without-libedit \  
--localstatedir=/etc  
 
define Build/InstallDev  
$(INSTALL_DIR) $(1)/usr/include  
$(CP) $(PKG_INSTALL_DIR)/usr/include \  
$(1)/usr/include/krb5  
$(INSTALL_DIR) $(1)/usr  
$(CP) $(PKG_INSTALL_DIR)/usr/lib \  
$(1)/usr  
rm -f $(1)/usr/lib/libcom_err*  
endef  
 
define Package/krb5-libs/install  
$(INSTALL_DIR) $(1)/usr/lib  
$(INSTALL_DIR) $(1)/usr/lib/krb5  
$(INSTALL_DIR) $(1)/usr/lib/krb5/plugins  
$(INSTALL_DIR) $(1)/usr/lib/krb5/plugins/kdb  
$(INSTALL_DIR) $(1)/usr/lib/krb5/plugins/libkrb5  
$(CP) $(PKG_INSTALL_DIR)/usr/lib/krb5/plugins/kdb/db2.so $(1)/usr/lib/krb5/plugins/kdb  
$(CP) $(PKG_INSTALL_DIR)/usr/lib/*.so* $(1)/usr/lib  
endef  
 
define Package/krb5-client/install  
$(INSTALL_DIR) $(1)/usr/bin  
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/kdestroy $(1)/usr/bin  
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/kinit $(1)/usr/bin  
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/klist $(1)/usr/bin  
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/kpasswd $(1)/usr/bin  
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/ksu $(1)/usr/bin  
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/kvno $(1)/usr/bin  
$(INSTALL_DIR) $(1)/usr/sbin  
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/krb5-send-pr $(1)/usr/sbin  
endef  
 
# Removed some server-side software to reduce package size. This should be  
# put in a separate package if needed.  
define Package/krb5-server/install  
$(INSTALL_DIR) $(1)/etc/init.d  
$(INSTALL_BIN) ./files/krb5kdc $(1)/etc/init.d/krb5kdc  
# $(INSTALL_DIR) $(1)/usr/bin  
# $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/sclient $(1)/usr/bin  
$(INSTALL_DIR) $(1)/usr/sbin  
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/kadmin.local $(1)/usr/sbin  
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/kadmind $(1)/usr/sbin  
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/kdb5_util $(1)/usr/sbin  
# $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/kprop $(1)/usr/sbin  
# $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/kpropd $(1)/usr/sbin  
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/krb5kdc $(1)/usr/sbin  
# $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/sim_server $(1)/usr/sbin  
endef  
 
$(eval $(call BuildPackage,krb5-libs))  
$(eval $(call BuildPackage,krb5-server))  
$(eval $(call BuildPackage,krb5-client))  
 
file:a/net/krb5/files/krb5kdc (deleted)
#!/bin/sh /etc/rc.common  
# Copyright (C) 2009 OpenWrt.org  
 
START=60  
 
start() {  
mkdir -p /var/tmp  
mkdir -p /etc/krb5kdc  
 
[ -f /etc/krb5kdc/principal ] || ( echo; echo ) | kdb5_util create -s  
 
/usr/sbin/krb5kdc  
/usr/sbin/kadmind  
}  
 
stop() {  
killall krb5kdc 2> /dev/null  
killall kadmind 2> /dev/null  
}  
 
diff -ur krb5-1.11-vanilla/src/lib/krb5/krb/preauth2.c krb5-1.11/src/lib/krb5/krb/preauth2.c  
--- krb5-1.11-vanilla/src/lib/krb5/krb/preauth2.c 2012-12-18 03:47:05.000000000 +0100  
+++ krb5-1.11/src/lib/krb5/krb/preauth2.c 2013-02-18 03:53:20.580840173 +0100  
@@ -956,7 +956,7 @@  
size_t i, h;  
int out_pa_list_size = 0;  
krb5_pa_data **out_pa_list = NULL;  
- krb5_error_code ret, module_ret;  
+ krb5_error_code ret, module_ret = 0;  
krb5_responder_fn responder = opte->opt_private->responder;  
static const int paorder[] = { PA_INFO, PA_REAL };  
 
 
file:a/net/l2tpv3tun/Makefile (deleted)
#  
# Copyright (C) 2009-2010 Thomas Heil <heil@terminal-consulting.de>  
# Copyright (C) 2010-2011 OpenWrt.org  
#  
# This is free software, licensed under the GNU General Public License v2.  
# See /LICENSE for more information.  
 
include $(TOPDIR)/rules.mk  
 
PKG_NAME:=l2tpv3tun  
PKG_VERSION:=0.2  
PKG_RELEASE:=1  
 
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz  
PKG_SOURCE_URL:=ftp://www.openl2tp.org/releases  
PKG_MD5SUM:=d3b4a9af652cca9f34d3eea4a7ff6041  
 
PKG_INSTALL:=1  
 
include $(INCLUDE_DIR)/kernel.mk  
include $(INCLUDE_DIR)/package.mk  
 
define Package/l2tpv3tun  
SECTION:=net  
CATEGORY:=Network  
DEPENDS:=+libnl-tiny +ip +kmod-l2tp +kmod-l2tp-ip +kmod-l2tp-eth  
TITLE:=Control utility for static L2TP v3 (Pseudowire) tunnels  
MAINTAINER:=Thomas Heil <heil@terminal-consulting.de>  
URL:=http://www.openl2tp.org  
endef  
 
define Package/l2tpv3tun/description  
The l2tpv3tun utility is a command line frontend for configuring static  
L2TP v3 pseudowire tunnels.  
endef  
 
MAKE_FLAGS += \  
CC="$(TARGET_CC)" \  
CFLAGS="$(TARGET_CFLAGS) -I$(STAGING_DIR)/usr/include -I$(STAGING_DIR)/usr/include/libnl-tiny/" \  
LD="$(TARGET_CC)" \  
LDFLAGS="$(TARGET_LDFLAGS) -L$(STAGING_DIR)/usr/lib/ -lnl-tiny"  
 
define Package/l2tpv3tun/install  
$(INSTALL_DIR) $(1)/usr/bin  
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/l2tpv3tun $(1)/usr/bin/  
$(INSTALL_DIR) $(1)/lib/network  
$(INSTALL_BIN) ./files/l2tp.sh $(1)/lib/network/  
endef  
 
$(eval $(call BuildPackage,l2tpv3tun))  
 
# l2tp.sh - L2TPv3 tunnel backend  
# Copyright (c) 2010 OpenWrt.org  
 
l2tp_next_tunnel_id() {  
local max=0  
local val  
for val in $(  
local l  
l2tpv3tun show tunnel | while read l; do  
case "$l" in  
Tunnel*,*encap*) l="${l#Tunnel }"; echo "${l%%,*}";;  
esac  
done  
); do  
[ "$val" -gt "$max" ] && max="$val"  
done  
echo $((max + 1))  
}  
 
l2tp_next_session_id() {  
local tunnel="$1"  
local max=0  
local val  
for val in $(  
local l  
l2tpv3tun show session${tunnel:+ tunnel_id "$tunnel"} | while read l; do  
case "$l" in  
Session*in*) l="${l#Session }"; echo "${l%% *}";;  
esac  
done  
); do  
[ "$val" -gt "$max" ] && max="$val"  
done  
echo $((max + 1))  
}  
 
l2tp_tunnel_exists() {  
test -n "$(l2tpv3tun show tunnel tunnel_id "$1" 2>/dev/null)"  
}  
 
l2tp_session_exists() {  
test -n "$(l2tpv3tun show session tunnel_id "$1" session_id "$2" 2>/dev/null)"  
}  
 
l2tp_ifname() {  
l2tpv3tun show session tunnel_id "$1" session_id "$2" 2>/dev/null | \  
sed -ne 's/^.*interface name: //p'  
}  
 
l2tp_lock() {  
lock /var/lock/l2tp-setup  
}  
 
l2tp_unlock() {  
lock -u /var/lock/l2tp-setup  
}  
 
l2tp_log() {  
logger -t "ifup-l2tp" "$@"  
}  
 
 
# Hook into scan_interfaces() to synthesize a .device option  
# This is needed for /sbin/ifup to properly dispatch control  
# to setup_interface_l2tp() even if no .ifname is set in  
# the configuration.  
scan_l2tp() {  
local dev  
config_get dev "$1" device  
config_set "$1" device "${dev:+$dev }l2tp-$1"  
}  
 
coldplug_interface_l2tp() {  
setup_interface_l2tp "l2tp-$1" "$1"  
}  
 
setup_interface_l2tp() {  
local iface="$1"  
local cfg="$2"  
local link="l2tp-$cfg"  
 
l2tp_lock  
 
# prevent recursion  
local up="$(uci_get_state network "$cfg" up 0)"  
[ "$up" = 0 ] || {  
l2tp_unlock  
return 0  
}  
 
local tunnel_id  
config_get tunnel_id "$cfg" tunnel_id  
[ -n "$tunnel_id" ] || {  
tunnel_id="$(l2tp_next_tunnel_id)"  
uci_set_state network "$cfg" tunnel_id "$tunnel_id"  
l2tp_log "No tunnel ID specified, assuming $tunnel_id"  
}  
 
local peer_tunnel_id  
config_get peer_tunnel_id "$cfg" peer_tunnel_id  
[ -n "$peer_tunnel_id" ] || {  
peer_tunnel_id="$tunnel_id"  
uci_set_state network "$cfg" peer_tunnel_id "$peer_tunnel_id"  
l2tp_log "No peer tunnel ID specified, assuming $peer_tunnel_id"  
}  
 
local encap  
config_get encap "$cfg" encap udp  
 
local sport dport  
[ "$encap" = udp ] && {  
config_get sport "$cfg" sport 1701  
config_get dport "$cfg" dport 1701  
}  
 
local peeraddr  
config_get peeraddr "$cfg" peeraddr  
[ -z "$peeraddr" ] && config_get peeraddr "$cfg" peer6addr  
 
local localaddr  
case "$peeraddr" in  
*:*) config_get localaddr "$cfg" local6addr ;;  
*) config_get localaddr "$cfg" localaddr ;;  
esac  
 
[ -n "$localaddr" -a -n "$peeraddr" ] || {  
l2tp_log "Missing local or peer address for tunnel $cfg - skipping"  
return 1  
}  
 
(  
while ! l2tp_tunnel_exists "$tunnel_id"; do  
[ -n "$sport" ] && l2tpv3tun show tunnel 2>/dev/null | grep -q "ports: $sport/" && {  
l2tp_log "There already is a tunnel with src port $sport - skipping"  
l2tp_unlock  
return 1  
}  
 
l2tpv3tun add tunnel tunnel_id "$tunnel_id" peer_tunnel_id "$peer_tunnel_id" \  
encap "$encap" local "$localaddr" remote "$peeraddr" \  
${sport:+udp_sport "$sport"} ${dport:+udp_dport "$dport"}  
 
# Wait for tunnel  
sleep 1  
done  
 
 
local session_id  
config_get session_id "$cfg" session_id  
[ -n "$session_id" ] || {  
session_id="$(l2tp_next_session_id "$tunnel_id")"  
uci_set_state network "$cfg" session_id "$session_id"  
l2tp_log "No session ID specified, assuming $session_id"  
}  
 
local peer_session_id  
config_get peer_session_id "$cfg" peer_session_id  
[ -n "$peer_session_id" ] || {  
peer_session_id="$session_id"  
uci_set_state network "$cfg" peer_session_id "$peer_session_id"  
l2tp_log "No peer session ID specified, assuming $peer_session_id"  
}  
 
 
while ! l2tp_session_exists "$tunnel_id" "$session_id"; do  
l2tpv3tun add session ifname "$link" tunnel_id "$tunnel_id" \  
session_id "$session_id" peer_session_id "$peer_session_id"  
 
# Wait for session  
sleep 1  
done  
 
 
local dev  
config_get dev "$cfg" device  
 
local ifn  
config_get ifn "$cfg" ifname  
 
uci_set_state network "$cfg" ifname "${ifn:-$dev}"  
uci_set_state network "$cfg" device "$dev"  
 
local mtu  
config_get mtu "$cfg" mtu 1462  
 
local ttl  
config_get ttl "$cfg" ttl  
 
ip link set mtu "$mtu" ${ttl:+ ttl "$ttl"} dev "$link"  
 
# IP setup inherited from proto static  
prepare_interface "$link" "$cfg"  
setup_interface_static "${ifn:-$dev}" "$cfg"  
 
ip link set up dev "$link"  
 
uci_set_state network "$cfg" up 1  
l2tp_unlock  
) &  
}  
 
stop_interface_l2tp() {  
local cfg="$1"  
local link="l2tp-$cfg"  
 
local tunnel=$(uci_get_state network "$cfg" tunnel_id)  
local session=$(uci_get_state network "$cfg" session_id)  
 
[ -n "$tunnel" ] && [ -n "$session" ] && {  
l2tpv3tun del session tunnel_id "$tunnel" session_id "$session"  
l2tpv3tun del tunnel tunnel_id "$tunnel"  
}  
}  
 
--- a/main.c  
+++ b/main.c  
@@ -560,6 +560,7 @@ static void usage(void)  
fprintf(stderr, " session_id ID peer_session_id ID\n");  
fprintf(stderr, " [ cookie HEXSTR ] [ peer_cookie HEXSTR ]\n");  
fprintf(stderr, " [ offset OFFSET ] [ peer_offset OFFSET ]\n");  
+ fprintf(stderr, " [ ifname IFNAME ]\n");  
fprintf(stderr, " %s del tunnel tunnel_id ID\n", L2TP_CMD_ROOT);  
fprintf(stderr, " %s del session tunnel_id ID session_id ID\n", L2TP_CMD_ROOT);  
fprintf(stderr, " %s show tunnel [ tunnel_id ID ]\n", L2TP_CMD_ROOT);  
@@ -671,6 +672,9 @@ static int parse_args(int argc, char **a  
p->peer_cookie_len = slen / 2;  
if (hex2mem(*argv, p->peer_cookie, p->peer_cookie_len) < 0)  
invarg("cookie must be a hex string\n", *argv);  
+ } else if (strcmp(*argv, "ifname") == 0) {  
+ NEXT_ARG();  
+ p->ifname = *argv;  
} else if (strcmp(*argv, "tunnel") == 0) {  
p->tunnel = 1;  
} else if (strcmp(*argv, "session") == 0) {  
 
--- a/main.c  
+++ b/main.c  
@@ -100,7 +100,7 @@ struct l2tp_data {  
};  
 
/* netlink socket */  
-static struct nl_handle *nl_sock;  
+static struct nl_sock *nl_sock;  
static int nl_family;  
 
/*****************************************************************************  
@@ -788,9 +788,9 @@ static int do_show(int argc, char **argv  
 
int do_ipl2tp(int argc, char **argv)  
{  
- nl_sock = nl_handle_alloc();  
+ nl_sock = nl_socket_alloc();  
if (!nl_sock) {  
- perror("nl_handle_alloc");  
+ perror("nl_socket_alloc");  
return 1;  
}  
 
 
file:a/net/lighttpd/Makefile (deleted)
#  
# Copyright (C) 2006-2013 OpenWrt.org  
#  
# This is free software, licensed under the GNU General Public License v2.  
# See /LICENSE for more information.  
#  
 
include $(TOPDIR)/rules.mk  
 
PKG_NAME:=lighttpd  
PKG_VERSION:=1.4.35  
PKG_RELEASE:=1  
 
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz  
PKG_SOURCE_URL:=http://download.lighttpd.net/lighttpd/releases-1.4.x  
PKG_MD5SUM:=c7ae774eab4cb7ac85e41b712f4ee9ba  
 
PKG_LICENSE:=BSD-3c  
PKG_LICENSE_FILES:=COPYING  
 
PKG_FIXUP:=autoreconf  
PKG_INSTALL:=1  
 
include $(INCLUDE_DIR)/package.mk  
 
define Package/lighttpd/Default  
SUBMENU:=Web Servers/Proxies  
SECTION:=net  
CATEGORY:=Network  
URL:=http://www.lighttpd.net/  
endef  
 
define Package/lighttpd  
$(call Package/lighttpd/Default)  
MENU:=1  
DEPENDS:=+LIGHTTPD_SSL:libopenssl +libpcre +libpthread  
TITLE:=A flexible and lightweight web server  
endef  
 
define Package/lighttpd/config  
config LIGHTTPD_SSL  
bool "SSL support"  
depends on PACKAGE_lighttpd  
default y  
help  
Implements SSL support in lighttpd (using libopenssl). This  
option is required if you enable the SSL engine in your  
lighttpd confguration file.  
endef  
 
CONFIGURE_ARGS+= \  
--libdir=/usr/lib/lighttpd \  
--sysconfdir=/etc/lighttpd \  
--enable-shared \  
--enable-static \  
--disable-rpath \  
--without-attr \  
--without-bzip2 \  
--without-fam \  
--without-gdbm \  
--without-ldap \  
--without-lua \  
--without-memcache \  
--with-pcre \  
--without-valgrind \  
$(call autoconf_bool,CONFIG_IPV6,ipv6)  
 
CONFIGURE_VARS+= \  
PCRE_LIB="-lpcre" \  
 
ifneq ($(strip $(CONFIG_LIGHTTPD_SSL)),)  
CONFIGURE_ARGS+= \  
--with-openssl="$(STAGING_DIR)/usr"  
else  
CONFIGURE_ARGS+= \  
--without-openssl  
endif  
 
ifneq ($(SDK)$(CONFIG_PACKAGE_lighttpd-mod-mysql-vhost),)  
CONFIGURE_ARGS+= \  
--with-mysql  
else  
CONFIGURE_ARGS+= \  
--without-mysql  
endif  
 
ifneq ($(SDK)$(CONFIG_PACKAGE_lighttpd-mod-webdav),)  
CONFIGURE_ARGS+= \  
--with-webdav-locks \  
--with-webdav-props  
# XXX: needed by sqlite3 to prevent segfaults in mod_webdav.so  
CONFIGURE_VARS+= \  
LIBS="-lpthread"  
else  
CONFIGURE_ARGS+= \  
--without-webdav-locks \  
--without-webdav-props  
endif  
 
define Build/Configure  
$(call Build/Configure/Default)  
# XXX: override pcre (mis)detection by ./configure when cross-compiling  
echo "#define HAVE_LIBPCRE 1" >>$(PKG_BUILD_DIR)/config.h  
echo "#define HAVE_PCRE_H 1" >>$(PKG_BUILD_DIR)/config.h  
endef  
 
define Package/lighttpd/conffiles  
/etc/lighttpd/lighttpd.conf  
endef  
 
define Package/lighttpd/install  
$(INSTALL_DIR) $(1)/etc/lighttpd  
$(INSTALL_DATA) ./files/lighttpd.conf $(1)/etc/lighttpd/  
$(INSTALL_DATA) $(PKG_BUILD_DIR)/doc/config/conf.d/mime.conf $(1)/etc/lighttpd/  
$(INSTALL_DIR) $(1)/etc/lighttpd/conf.d  
$(INSTALL_DIR) $(1)/etc/init.d  
$(INSTALL_BIN) ./files/lighttpd.init $(1)/etc/init.d/lighttpd  
$(INSTALL_DIR) $(1)/usr/lib/lighttpd  
for m in dirlisting indexfile staticfile; do \  
$(CP) $(PKG_INSTALL_DIR)/usr/lib/lighttpd/mod_$$$${m}.so $(1)/usr/lib/lighttpd/ ; \  
done  
$(INSTALL_DIR) $(1)/usr/sbin  
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/lighttpd $(1)/usr/sbin/  
endef  
 
define BuildPlugin  
define Package/lighttpd-mod-$(1)  
$(call Package/lighttpd/Default)  
DEPENDS:=lighttpd  
ifneq ($(3),)  
DEPENDS+= $(3)  
endif  
TITLE:=$(2) module  
endef  
 
define Package/lighttpd-mod-$(1)/install  
$(INSTALL_DIR) $$(1)/usr/lib/lighttpd  
$(CP) $(PKG_INSTALL_DIR)/usr/lib/lighttpd/mod_$(1).so $$(1)/usr/lib/lighttpd  
$(INSTALL_DIR) $$(1)/etc/lighttpd/conf.d  
if [ -f $(PKG_BUILD_DIR)/doc/config/conf.d/$(1).conf ]; then \  
$(CP) $(PKG_BUILD_DIR)/doc/config/conf.d/$(1).conf $$(1)/etc/lighttpd/conf.d/$(4)-$(1).conf ; \  
else \  
echo 'server.modules += ( "mod_$(1)" )' > $$(1)/etc/lighttpd/conf.d/$(4)-$(1).conf ; \  
fi  
endef  
 
$$(eval $$(call BuildPackage,lighttpd-mod-$(1)))  
endef  
 
$(eval $(call BuildPackage,lighttpd))  
$(eval $(call BuildPlugin,access,Access restrictions,,10))  
$(eval $(call BuildPlugin,accesslog,Access logging,,10))  
$(eval $(call BuildPlugin,alias,Directory alias,,10))  
$(eval $(call BuildPlugin,auth,Authentication,,05))  
$(eval $(call BuildPlugin,cgi,CGI,,10))  
$(eval $(call BuildPlugin,cml,Cache Meta Language,,10))  
$(eval $(call BuildPlugin,compress,Compress output,+PACKAGE_lighttpd-mod-compress:zlib,10))  
$(eval $(call BuildPlugin,evasive,Evasive,,10))  
$(eval $(call BuildPlugin,evhost,Exnhanced Virtual-Hosting,,10))  
$(eval $(call BuildPlugin,expire,Expire,,10))  
$(eval $(call BuildPlugin,extforward,Extract client,,10))  
$(eval $(call BuildPlugin,fastcgi,FastCGI,,10))  
$(eval $(call BuildPlugin,flv_streaming,FLV streaming,,10))  
$(eval $(call BuildPlugin,magnet,Magnet,,10))  
$(eval $(call BuildPlugin,mysql_vhost,Mysql virtual hosting,+PACKAGE_lighttpd-mod-mysql_vhost:libmysqlclient,10))  
$(eval $(call BuildPlugin,proxy,Proxy,,10))  
$(eval $(call BuildPlugin,redirect,URL redirection,+PACKAGE_lighttpd-mod-redirect:libpcre,10))  
$(eval $(call BuildPlugin,rewrite,URL rewriting,+PACKAGE_lighttpd-mod-rewrite:libpcre,10))  
$(eval $(call BuildPlugin,rrdtool,RRDtool,,10))  
$(eval $(call BuildPlugin,scgi,SCGI,,10))  
$(eval $(call BuildPlugin,secdownload,Secure and fast download,,10))  
$(eval $(call BuildPlugin,setenv,Environment variable setting,,10))  
$(eval $(call BuildPlugin,simple_vhost,Simple virtual hosting,,10))  
$(eval $(call BuildPlugin,ssi,SSI,+libpcre,10))  
$(eval $(call BuildPlugin,status,Server status display,,10))  
$(eval $(call BuildPlugin,trigger_b4_dl,Trigger before download,+PACKAGE_lighttpd-mod-trigger_b4_dl:libpcre,10))  
$(eval $(call BuildPlugin,userdir,User directory,,10))  
$(eval $(call BuildPlugin,usertrack,User tracking,,10))  
$(eval $(call BuildPlugin,webdav,WebDAV,+PACKAGE_lighttpd-mod-webdav:libsqlite3 +PACKAGE_lighttpd-mod-webdav:libuuid +PACKAGE_lighttpd-mod-webdav:libxml2,10))  
 
 
# lighttpd configuration file  
#  
server.modules = (  
)  
 
### only root can use these options  
#server.chroot = "/"  
 
######### Options that are good to be but not neccesary to be changed #######  
#server.port = 81  
#server.bind = "localhost"  
server.document-root = "/www"  
server.upload-dirs = ( "/tmp" )  
server.errorlog = "/var/log/lighttpd/error.log"  
server.pid-file = "/var/run/lighttpd.pid"  
#server.username = "www-data"  
#server.groupname = "www-data"  
#server.tag = "lighttpd"  
#server.errorlog-use-syslog = "enable"  
#server.network-backend = "write"  
 
index-file.names = ( "index.php", "index.html",  
"index.htm", "default.htm",  
" index.lighttpd.html" )  
 
static-file.exclude-extensions = ( ".php", ".pl", ".fcgi" )  
 
## Use ipv6 if available  
#include_shell "/usr/share/lighttpd/use-ipv6.pl"  
 
#dir-listing.encoding = "utf-8"  
#server.dir-listing = "enable"  
 
include "/etc/lighttpd/mime.conf"  
include_shell "cat /etc/lighttpd/conf.d/*.conf"  
 
 
 
 
#!/bin/sh /etc/rc.common  
# Copyright (C) 2006-2011 OpenWrt.org  
 
SERVICE_USE_PID=1  
 
START=50  
 
start() {  
mkdir -m 0755 -p /var/log/lighttpd  
service_start /usr/sbin/lighttpd -f /etc/lighttpd/lighttpd.conf  
}  
 
stop() {  
service_stop /usr/sbin/lighttpd  
}  
 
 
file:a/net/znc/Makefile (deleted)
#  
# Copyright (C) 2009-2010 OpenWrt.org  
#  
# This is free software, licensed under the GNU General Public License v2.  
# See /LICENSE for more information.  
#  
 
include $(TOPDIR)/rules.mk  
 
PKG_NAME:=znc  
PKG_VERSION:=1.2  
PKG_RELEASE:=1  
 
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz  
PKG_SOURCE_URL:=http://znc.in/releases \  
http://znc.in/releases/archive  
PKG_MD5SUM:=ef18e5402a82cc3fcab5c2ac5c2e6f3b  
 
PKG_BUILD_PARALLEL:=1  
 
 
define Package/znc/default  
SUBMENU:=Instant Messaging  
SECTION:=net  
CATEGORY:=Network  
TITLE:=ZNC  
URL:=http://en.znc.in/  
MAINTAINER:=Jonas Gorski <jogo@openwrt.org>  
endef  
 
define Package/znc  
$(Package/znc/default)  
DEPENDS:=+libopenssl +libpthread $(CXX_DEPENDS)  
MENU:=1  
endef  
 
define Package/znc/description  
ZNC is an IRC bouncer with many advanced features like detaching,  
multiple users, per channel playback buffer, SSL, IPv6, transparent DCC  
bouncing, and c++ module support to name a few.  
endef  
 
define Package/znc/conffiles  
/etc/config/znc  
endef  
 
 
define Package/znc/install  
$(INSTALL_DIR) $(1)/usr/bin  
$(INSTALL_BIN) $(PKG_BUILD_DIR)/znc $(1)/usr/bin/  
$(INSTALL_DIR) $(1)/etc/init.d  
$(INSTALL_BIN) ./files/znc.init $(1)/etc/init.d/znc  
$(INSTALL_DIR) $(1)/etc/config  
$(INSTALL_DATA) ./files/znc.conf $(1)/etc/config/znc  
$(INSTALL_DIR) $(1)/usr/lib/znc/  
$(INSTALL_BIN) $(PKG_BUILD_DIR)/modules/droproot.so $(1)/usr/lib/znc/  
endef  
 
 
ZNC_MODULES :=  
ZNC_MODULE_TARGETS := droproot.so  
 
define module  
define Package/znc-mod-$(strip $(1))  
$(Package/znc/default)  
TITLE+= ($(strip $(1)) plugin)  
DEPENDS:=znc  
endef  
 
define Package/znc-mod-$(strip $(1))/description  
$(strip $(2))  
endef  
 
define Package/znc-mod-$(strip $(1))/install  
$(INSTALL_DIR) $$(1)/usr/lib/znc/  
$(INSTALL_BIN) $$(PKG_BUILD_DIR)/modules/$(subst -,_,$(strip $(1))).so $$(1)/usr/lib/znc/  
# include webadmin page templates if existing  
if [ -d $$(PKG_BUILD_DIR)/modules/data/$(subst -,_,$(strip $(1))) ]; then \  
$(INSTALL_DIR) $$(1)/usr/share/znc/modules ;\  
$(CP) -r $$(PKG_BUILD_DIR)/modules/data/$(subst -,_,$(strip $(1))) $$(1)/usr/share/znc/modules ;\  
fi  
endef  
 
ZNC_MODULES += znc-mod-$(strip $(1))  
$(if $(CONFIG_PACKAGE_znc-mod-$(strip $(1))),ZNC_MODULE_TARGETS += $(subst -,_,$(strip $(1))).so)  
endef  
 
define webadmin  
define Package/znc-mod-webadmin  
$(Package/znc/default)  
TITLE+= (webadmin plugin)  
DEPENDS:=znc  
endef  
 
define Package/znc-mod-webadmin/description  
Allows you to add/remove/edit users and settings on the fly via a web browser.  
endef  
 
define Package/znc-mod-webadmin/install  
$(INSTALL_DIR) $$(1)/usr/lib/znc/  
$(INSTALL_BIN) $$(PKG_BUILD_DIR)/modules/webadmin.so $$(1)/usr/lib/znc/  
$(INSTALL_DIR) $$(1)/usr/share/znc/modules  
$(CP) -r $$(PKG_BUILD_DIR)/modules/data/webadmin $$(1)/usr/share/znc/modules  
$(INSTALL_DIR) $$(1)/usr/share/znc/webskins/  
$(CP) -r $$(PKG_BUILD_DIR)/webskins/_default_ $$(1)/usr/share/znc/webskins/  
endef  
 
ZNC_MODULES += znc-mod-webadmin  
$(if $(CONFIG_PACKAGE_znc-mod-webadmin),ZNC_MODULE_TARGETS += webadmin.so)  
endef  
 
define webskin  
define Package/znc-webskin-$(strip $(1))  
$(Package/znc/default)  
TITLE+= ($(strip $(1)) webskin)  
DEPENDS:=znc-mod-webadmin  
endef  
 
define Package/znc-webskin-$(strip $(1))/description  
$(strip $(1)) webskin for webadmin  
endef  
 
define Package/znc-webskin-$(strip $(1))/install  
$(INSTALL_DIR) $$(1)/usr/share/znc/webskins/  
$(CP) -r $$(PKG_BUILD_DIR)/webskins/$(strip $(1)) $$(1)/usr/share/znc/webskins/  
endef  
ZNC_MODULES += znc-webskin-$(strip $(1))  
endef  
 
, := ,  
 
$(eval $(call module,adminlog,Log user connects and disconnects and failed \  
logins to file or syslog.))  
 
$(eval $(call module,autoattach,Reattaches you to channels on activity.))  
 
$(eval $(call module,autocycle,Cycles a channel when you are the only one in \  
there and you don't have op.))  
 
$(eval $(call module,autoop,Auto op the good guys.))  
 
$(eval $(call module,autoreply,Gives a automatic reply if someone messages you \  
if you are away.))  
 
$(eval $(call module,autovoice,Autovoices everyone who joins some channel.))  
 
$(eval $(call module,awaynick,Change your nick while you are away.))  
 
$(eval $(call module,awaystore,Stores messages while away$(,) also auto away.))  
 
$(eval $(call module,block-motd,This module blocks the server's Message of the \  
Day.))  
 
$(eval $(call module,blockuser,Blocks certain users from using ZNC saying \  
their account was disabled.))  
 
$(eval $(call module,bouncedcc,Bounces dcc transfers through the znc server \  
instead of sending them directly to the user.))  
 
$(eval $(call module,buffextras,Add nick changes$(,) joins$(,) parts$(,) topic \  
changes etc. to your playback buffer.))  
 
$(eval $(call module,cert,Use a SSL certificate for connecting to a server.))  
 
$(eval $(call module,certauth,This module allows users to log in to ZNC via \  
SSL client keys.))  
 
$(eval $(call module,chansaver,Keeping config up to date when user joins and \  
parts.))  
 
$(eval $(call module,clearbufferonmsg,This module keeps the buffer until the \  
next message from the client.))  
 
$(eval $(call module,clientnotify,Notify about new incoming connections to \  
your user.))  
 
$(eval $(call module,controlpanel,Allows you to add/remove/edit users and \  
settings on the fly via IRC messages.))  
 
$(eval $(call module,crypt,Encryption for channel/private messages.))  
 
$(eval $(call module,ctcpflood,This module tries to block ctcp floods.))  
 
$(eval $(call module,dcc,Allows you to transfer files to and from ZNC.))  
 
$(eval $(call module,disconkick,This module will kick your client from all \  
channels where you are$(,) in case if ZNC disconnects from server.))  
 
$(eval $(call module,fail2ban,Block IPs for some time after a failed login.))  
 
$(eval $(call module,flooddetach,This module detaches you from channels which \  
are flooded.))  
 
$(eval $(call module,identfile,Places the ident of a user to a file when they \  
are trying to connect.))  
 
$(eval $(call module,keepnick,Tries to get you your primary nick.))  
 
$(eval $(call module,kickrejoin,Implements auto-rejoin-on-kick.))  
 
$(eval $(call module,lastseen,Logs when a user last logged in to ZNC.))  
 
$(eval $(call module,listsockets,This module displays a list of all open \  
sockets in ZNC.))  
 
$(eval $(call module,log,Log conversations to file.))  
 
$(eval $(call module,modules_online,This module fakes the online status of \  
ZNC-*users.))  
 
$(eval $(call module,nickserv,Auths you with NickServ.))  
 
$(eval $(call module,notes,This modules stores and displays short notes using \  
a key/note pairs and shows them to you on connect.))  
 
$(eval $(call module,notify-connect,Sends a notice to all admins when a user \  
logs in or out.))  
 
$(eval $(call module,partyline,Allows ZNC users to join internal channels and \  
query other ZNC users on the same ZNC.))  
 
$(eval $(call module,perform,Performs commands on connect.))  
 
$(eval $(call module,q,Auths you with Q (and a little more).))  
 
$(eval $(call module,raw,View all of the raw traffic.))  
 
$(eval $(call module,route-replies,Routes back answers to the right client \  
when connected with multiple clients.))  
 
$(eval $(call module,sasl,The SASL module allows you to authenticate to an \  
IRC network via SASL.))  
 
$(eval $(call module,savebuff,Saves your channel buffers into an encrypted \  
file so they can survive restarts and reboots.))  
 
$(eval $(call module,schat,SSL (encrypted) DCC chats.))  
 
$(eval $(call module,send-raw,Allows you to send raw traffic to IRC from \  
other users.))  
 
$(eval $(call module,simple-away,This module will automatically set you away \  
on IRC while you are disconnected from the bouncer.))  
 
$(eval $(call module,shell,Have your unix shell in a query window right inside \  
of your IRC client.))  
 
$(eval $(call module,stickychan,Keeps you sticked to specific channels.))  
 
$(eval $(call module,watch,Monitor activity for specific text patterns from \  
specific users and have the text sent to a special query window.))  
 
$(eval $(call webadmin))  
 
$(eval $(call webskin,dark-clouds))  
$(eval $(call webskin,forest))  
$(eval $(call webskin,ice))  
 
PKG_CONFIG_DEPENDS := $(patsubst %,CONFIG_PACKAGE_%,$(ZNC_MODULES))  
 
include $(INCLUDE_DIR)/uclibc++.mk  
include $(INCLUDE_DIR)/package.mk  
 
CONFIGURE_VARS += \  
CXXFLAGS="$(TARGET_CFLAGS) -fno-builtin -fno-rtti -nostdinc++" \  
CPPFLAGS="-I$(STAGING_DIR)/usr/include -I$(STAGING_DIR)/include" \  
LDFLAGS="-nodefaultlibs -lc -L$(STAGING_DIR)/usr/lib -L$(STAGING_DIR)/lib" \  
LIBS="-luClibc++ -lm -lssl -lcrypto $(LIBGCC_S) -lc"  
 
CONFIGURE_ARGS += \  
--disable-c-ares \  
--disable-perl  
 
define Build/Configure  
$(call Build/Configure/Default,)  
$(call libtool_disable_rpath)  
endef  
 
define Build/Compile  
$(call Build/Compile/Default,znc)  
+$(MAKE_VARS) $(MAKE) $(PKG_JOBS) -C $(PKG_BUILD_DIR)/modules \  
$(MAKE_FLAGS) $(ZNC_MODULE_TARGETS)  
endef  
 
$(eval $(call BuildPackage,znc))  
$(foreach m,$(ZNC_MODULES),$(eval $(call BuildPackage,$(m))))  
 
file:a/net/znc/files/znc.conf (deleted)
config znc  
# where to listen for connections  
list listener '192.168.1.1 1234'  
# If using SSL sockets, use the following certifcate:  
# option znc_ssl_cert '/etc/znc.cert'  
 
# load global modules (You need to install them first):  
# list module 'fail2ban'  
 
# remove this to enable the service  
option disabled 1  
 
config user 'sampleUser'  
# Use either a plain text password or use the full sha256#... line.  
# You can generate one with 'znc -s'.  
option password 'changeme'  
option nick 'sampleUser'  
option altnick 'userSample'  
option ident 'openwrt'  
option realname 'John Doe'  
 
# This adds support for channels in znc configuration:  
# list channel '#chan optional_password'  
 
# list of allowed servers:  
# list server 'chat.freenode.net 6667'  
 
# load user modules ('<module> [params...]'):  
# list module 'simple_away -timer 10 disconnected'  
 
file:a/net/znc/files/znc.init (deleted)
#!/bin/sh /etc/rc.common  
# Copyright (C) 2010 Openwrt.org  
 
START=60  
 
ZNC_CONFIG_PATH=/tmp/etc/znc  
PID_FILE=${ZNC_CONFIG_PATH}/znc.pid  
ZNC_CONFIG=${ZNC_CONFIG_PATH}/configs/znc.conf  
 
EXTERNAL_CONFIG=0  
DISABLED=  
 
RUNAS_USER=  
RUNAS_GROUP=  
 
add_param() {  
echo "$1 = $2" >> $ZNC_CONFIG  
}  
 
add_chan() {  
chan=${1% *}  
pass=${1#* }  
echo " <Chan $chan>" >> $ZNC_CONFIG  
[ "$chan" != "$pass" ] && echo " Key = $pass" >> $ZNC_CONFIG  
echo " </Chan>" >> $ZNC_CONFIG  
}  
 
add_network() {  
local current_user="$1"  
local network="$2"  
local user  
local name  
 
config_get user "$network" user  
 
[ "$user" = "$current_user" ] || return 0  
 
config_get name "$network" name  
echo " <Network $name>" >> $ZNC_CONFIG  
config_list_foreach "$network" server "add_param \" Server\""  
config_list_foreach "$network" channel "add_chan"  
}  
 
znc_global() {  
local znc="$1"  
local anoniplimit  
local maxbuffersize  
local connectdelay  
local serverthrottle  
local znc_config_path  
local znc_pem_file  
 
config_get_bool DISABLED "$znc" disabled 0  
 
[ "$DISABLED" -eq 0 ] || return 0  
 
config_get znc_config_path "$znc" znc_config_path  
 
config_get RUNAS_USER "$znc" runas_user  
config_get RUNAS_GROUP "$znc" runas_group  
 
if [ "${znc_config_path}" ]  
then  
ZNC_CONFIG_PATH=$znc_config_path  
EXTERNAL_CONFIG=1  
else  
mkdir -p $ZNC_CONFIG_PATH/configs/  
[ ! -f "$ZNC_CONFIG" ] || rm "$ZNC_CONFIG"  
 
add_param "Version" "1.0"  
 
config_get anoniplimit "$znc" anoniplimit  
config_get maxbuffersize "$znc" maxbuffersize  
config_get connectdelay "$znc" connectdelay  
config_get serverthrottle "$znc" serverthrottle  
config_get znc_pem_file "$znc" znc_ssl_cert  
 
[ -z "$znc_pem_file" ] || ln -sf "$znc_pem_file" $ZNC_CONFIG_PATH/znc.pem  
 
[ -z $anoniplimit ] || echo "AnonIPLimit = $anoniplimit" >> $ZNC_CONFIG  
[ -z $maxbuffersize ] || echo "MaxBufferSize = $maxbuffersize" >> $ZNC_CONFIG  
[ -z $connectdelay ] || echo "ConnectDelay = $connectdelay" >> $ZNC_CONFIG  
[ -z $serverthrottle ] || echo "ServerThrottle = $anoniplimit" >> $ZNC_CONFIG  
 
echo "PidFile = $PID_FILE" >> $ZNC_CONFIG  
 
config_list_foreach "$znc" listener "add_param Listener"  
config_list_foreach "$znc" module "add_param LoadModule"  
 
add_param LoadModule "droproot ${RUNAS_USER:-nobody} ${RUNAS_GROUP:-nogroup}"  
fi  
}  
 
add_user() {  
local user="$1"  
local password  
local nick  
local altnick  
local ident  
local realname  
local buffer  
local quitmsg  
local chanmodes  
local vhost  
local server  
 
config_get password "$user" password  
config_get nick "$user" nick  
config_get altnick "$user" altnick  
config_get ident "$user" ident  
config_get realname "$user" realname  
config_get buffer "$user" buffer  
config_get quitmsg "$user" quitmsg  
config_get chanmodes "$user" chanmodes  
config_get vhost "$user" vhost  
config_get server "$user" server  
 
echo "<User $user>" >> $ZNC_CONFIG  
 
case "$password" in  
"md5#"* | "sha256#"* | "plain#"*)  
add_param " Pass" "$password"  
;;  
*)  
add_param " Pass" "plain#$password"  
;;  
esac  
 
add_param " Nick" "$nick"  
add_param " AltNick" "${altnick:-$nick"_"}"  
add_param " Ident" "${ident:-$nick}"  
add_param " RealName" "${realname:-$nick}"  
[ -z "$vhost" ] || add_param " VHost" "$vhost"  
add_param " Buffer" "${buffer:-50}"  
add_param " KeepBuffer" "false"  
add_param " ChanModes" "${chanmodes:-"+stn"}"  
[ -z "$quitmsg" ] || add_param " QuitMsg" "$quitmsg"  
 
config_list_foreach "$user" module "add_param \" LoadModule\""  
 
# add legacy network  
if [ "$server" ]; then  
echo " <Network Default>" >> $ZNC_CONFIG  
config_list_foreach "$user" server "add_param \" Server\""  
config_list_foreach "$user" channel "add_chan"  
echo " </Network>" >> $ZNC_CONFIG  
fi  
 
config_foreach "add_network \"$user\"" network  
 
echo "</User>" >> $ZNC_CONFIG  
}  
 
 
start() {  
config_load znc  
config_foreach znc_global znc  
 
if [ "$DISABLED" -eq 1 ]; then  
return 0  
fi  
 
if [ "$EXTERNAL_CONFIG" -eq 0 ]  
then  
config_foreach add_listener listener  
config_foreach add_user user  
 
chown -hR ${RUNAS_USER:-nobody}:${RUNAS_GROUP:-nogroup} /tmp/etc/znc  
fi  
 
if [ "$EXTERNAL_CONFIG" -eq 1 -a "$RUNAS_USER" ]  
then  
local SU=$(which su)  
if [ "$SU" ]  
then  
$SU -c "/usr/bin/znc -d$ZNC_CONFIG_PATH >/dev/null &" $RUNAS_USER  
else  
logger -s -t ZNC -p daemon.err "Could not run ZNC as user $RUNAS_USER: su not found."  
exit 1  
fi  
else  
/usr/bin/znc -d$ZNC_CONFIG_PATH >/dev/null &  
fi  
}  
 
stop() {  
if [ -f "$PID_FILE" ]  
then  
kill $(cat "$PID_FILE")  
else  
killall znc  
fi  
}  
 
 
From 5f655f9a25a377c01cb15517859eb514628a43d4 Mon Sep 17 00:00:00 2001  
From: Jonas Gorski <jonas.gorski+openwrt@gmail.com>  
Date: Wed, 6 Apr 2011 04:10:23 +0200  
Subject: [PATCH] Move the root check to after config parsing  
 
---  
src/main.cpp | 27 ++++++++++++++-------------  
1 files changed, 14 insertions(+), 13 deletions(-)  
 
--- a/src/main.cpp  
+++ b/src/main.cpp  
@@ -243,19 +243,6 @@ int main(int argc, char** argv) {  
CUtils::PrintStatus(true, "");  
}  
 
- if (isRoot()) {  
- CUtils::PrintError("You are running ZNC as root! Don't do that! There are not many valid");  
- CUtils::PrintError("reasons for this and it can, in theory, cause great damage!");  
- if (!bAllowRoot) {  
- delete pZNC;  
- return 1;  
- }  
- CUtils::PrintError("You have been warned.");  
- CUtils::PrintError("Hit CTRL+C now if you don't want to run ZNC as root.");  
- CUtils::PrintError("ZNC will start in 30 seconds.");  
- sleep(30);  
- }  
-  
if (bMakeConf) {  
if (!pZNC->WriteNewConfig(sConfig)) {  
delete pZNC;  
@@ -276,6 +263,20 @@ int main(int argc, char** argv) {  
return 1;  
}  
 
+ if (isRoot()) {  
+ CUtils::PrintError("You are running ZNC as root! Don't do that! There are not many valid");  
+ CUtils::PrintError("reasons for this and it can, in theory, cause great damage!");  
+ if (!bAllowRoot) {  
+ delete pZNC;  
+ return 1;  
+ }  
+ CUtils::PrintError("You have been warned.");  
+ CUtils::PrintError("Hit CTRL+C now if you don't want to run ZNC as root.");  
+ CUtils::PrintError("ZNC will start in 30 seconds.");  
+ sleep(30);  
+ }  
+  
+  
if (bForeground) {  
int iPid = getpid();  
CUtils::PrintMessage("Staying open for debugging [pid: " + CString(iPid) + "]");  
 
From fa14938321eda39f16bee6068296e6abc9df7b85 Mon Sep 17 00:00:00 2001  
From: Jonas Gorski <jonas.gorski+openwrt@gmail.com>  
Date: Wed, 6 Apr 2011 04:11:48 +0200  
Subject: [PATCH] Add a uClibc++ build workaround  
 
---  
modules/webadmin.cpp | 4 +++-  
1 files changed, 3 insertions(+), 1 deletions(-)  
 
--- a/modules/webadmin.cpp  
+++ b/modules/webadmin.cpp  
@@ -20,6 +20,7 @@  
#include <znc/IRCNetwork.h>  
#include <znc/IRCSock.h>  
 
+using std::string;  
using std::stringstream;  
using std::make_pair;  
using std::set;  
@@ -75,7 +76,7 @@ class CWebAdminMod : public CModule {  
public:  
MODCONSTRUCTOR(CWebAdminMod) {  
VPair vParams;  
- vParams.push_back(make_pair("user", ""));  
+ vParams.push_back(make_pair((string)"user", (string)""));  
AddSubPage(new CWebSubPage("settings", "Global Settings", CWebSubPage::F_ADMIN));  
AddSubPage(new CWebSubPage("edituser", "Your Settings", vParams));  
AddSubPage(new CWebSubPage("traffic", "Traffic Info", CWebSubPage::F_ADMIN));  
 
From 94aff4c3389111fc85054eb06b40bea26a216d0c Mon Sep 17 00:00:00 2001  
From: Jonas Gorski <jonas.gorski+openwrt@gmail.com>  
Date: Sat, 16 Apr 2011 05:51:04 +0200  
Subject: [PATCH] Don't rebuild everything when the Makefile's timestamp changed  
 
---  
Makefile.in | 2 +-  
modules/Makefile.in | 2 +-  
2 files changed, 2 insertions(+), 2 deletions(-)  
 
--- a/Makefile.in  
+++ b/Makefile.in  
@@ -104,7 +104,7 @@ clean:  
distclean: clean  
rm -rf $(DISTCLEAN)  
 
-src/%.o: src/%.cpp Makefile  
+src/%.o: src/%.cpp  
@mkdir -p .depend src  
$(E) Building core object $*...  
$(Q)$(CXX) $(CXXFLAGS) -c -o $@ $< -MD -MF .depend/$*.dep -MT $@  
--- a/modules/Makefile.in  
+++ b/modules/Makefile.in  
@@ -117,12 +117,12 @@ install_datadir:  
clean:  
rm -rf $(CLEAN)  
 
-%.o: %.cpp Makefile  
+%.o: %.cpp  
@mkdir -p .depend  
$(E) Building module $(notdir $(basename $@))...  
$(Q)$(CXX) $(MODFLAGS) -c -o $@ $< $($(notdir $(basename $@))CXXFLAGS) -MD -MF .depend/$(notdir $@).dep  
 
-%.so: %.o Makefile  
+%.so: %.o  
$(E) "Linking module" $(notdir $(basename $@))...  
$(Q)$(CXX) $(MODFLAGS) $(LDFLAGS) $(MODLINK) -o $@ $< $($(notdir $(basename $@))LDFLAGS) $(LIBS)  
 
 
--- /dev/null  
+++ b/modules/droproot.cpp  
@@ -0,0 +1,144 @@  
+/*  
+ * droproot.cpp  
+ *  
+ * Copyright (c) 2009 Vadtec (vadtec@vadtec.net)  
+ * This program is free software; you can redistribute it and/or modify it  
+ * under the terms of the GNU General Public License version 2 as published  
+ * by the Free Software Foundation.  
+ *  
+ * Copyright (C) 2004-2012 See the AUTHORS file for details.  
+ *  
+ * This program is free software; you can redistribute it and/or modify it  
+ * under the terms of the GNU General Public License version 2 as published  
+ * by the Free Software Foundation.  
+ */  
+  
+#include <znc/znc.h>  
+#include <znc/User.h>  
+#include <pwd.h>  
+#include <grp.h>  
+  
+class CDroproot : public CModule {  
+  
+public:  
+ MODCONSTRUCTOR(CDroproot) {  
+ }  
+  
+ virtual ~CDroproot() {  
+ }  
+  
+ uid_t GetUser(const CString& sUser, CString& sMessage) {  
+ uid_t ret = sUser.ToUInt();  
+  
+ if (ret != 0)  
+ return ret;  
+  
+ struct passwd *pUser = getpwnam(sUser.c_str());  
+  
+ if (!pUser) {  
+ sMessage = "User [" + sUser + "] not found!";  
+ return 0;  
+ }  
+  
+ return pUser->pw_uid;  
+ }  
+  
+ gid_t GetGroup(const CString& sGroup, CString& sMessage) {  
+ gid_t ret = sGroup.ToUInt();  
+  
+ if (ret != 0)  
+ return ret;  
+  
+ struct group *pGroup = getgrnam(sGroup.c_str());  
+  
+ if (!pGroup) {  
+ sMessage = "Group [" + sGroup + "] not found!";  
+ return 0;  
+ }  
+  
+ return pGroup->gr_gid;  
+ }  
+  
+ virtual bool OnLoad(const CString& sArgs, CString& sMessage) {  
+ CString sUser = sArgs.Token(0);  
+ CString sGroup = sArgs.Token(1, true);  
+  
+ if (sUser.empty() || sGroup.empty()) {  
+ sMessage = "Usage: LoadModule = Droproot <uid> <gid>";  
+ return false;  
+ }  
+  
+ m_user = GetUser(sUser, sMessage);  
+  
+ if (m_user == 0) {  
+ sMessage  
+ = "Error: Cannot run as root, check your config file | Useage: LoadModule = Droproot <uid> <gid>";  
+ return false;  
+ }  
+  
+ m_group = GetGroup(sGroup, sMessage);  
+  
+ if (m_group == 0) {  
+ sMessage  
+ = "Error: Cannot run as root, check your config file | Useage: LoadModule = Droproot <uid> <gid>";  
+ return false;  
+ }  
+  
+ return true;  
+ }  
+  
+ virtual bool OnBoot() {  
+ int u, eu, g, eg, sg;  
+  
+ if ((geteuid() == 0) || (getuid() == 0) || (getegid() == 0) || (getgid()  
+ == 0)) {  
+  
+ CUtils::PrintAction("Dropping root permissions");  
+  
+ // Clear all the supplementary groups  
+ sg = setgroups(0, NULL);  
+  
+ if (sg < 0) {  
+ CUtils::PrintStatus(false,  
+ "Could not remove supplementary groups! ["  
+ + CString(strerror(errno)) + "]");  
+  
+ return false;  
+ }  
+  
+ // Set the group (if we are root, this sets all three group IDs)  
+ g = setgid(m_group);  
+ eg = setegid(m_group);  
+  
+ if ((g < 0) || (eg < 0)) {  
+ CUtils::PrintStatus(false, "Could not switch group id! ["  
+ + CString(strerror(errno)) + "]");  
+  
+ return false;  
+ }  
+  
+ // and set the user (if we are root, this sets all three user IDs)  
+ u = setuid(m_user);  
+ eu = seteuid(m_user);  
+  
+ if ((u < 0) || (eu < 0)) {  
+ CUtils::PrintStatus(false, "Could not switch user id! ["  
+ + CString(strerror(errno)) + "]");  
+  
+ return false;  
+ }  
+  
+ CUtils::PrintStatus(true);  
+  
+ return true;  
+ }  
+  
+ return true;  
+ }  
+  
+protected:  
+ uid_t m_user;  
+ gid_t m_group;  
+};  
+  
+GLOBALMODULEDEFS(CDroproot, "Allows ZNC to drop root privileges and run as an un-privileged user.")  
 
file:a/utils/cmdpad/Makefile (deleted)
#  
# Copyright (C) 2007-2011 OpenWrt.org  
#  
# This is free software, licensed under the GNU General Public License v2.  
# See /LICENSE for more information.  
#  
 
include $(TOPDIR)/rules.mk  
 
PKG_NAME:=cmdpad  
PKG_VERSION:=0.0.3  
PKG_RELEASE:=3  
 
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tgz  
PKG_SOURCE_URL:=@SF/cmdpad  
PKG_MD5SUM:=6633b2354b7f23f9cd8e2bfb6e735965  
 
include $(INCLUDE_DIR)/package.mk  
 
define Package/cmdpad  
SECTION:=utils  
CATEGORY:=Utilities  
TITLE:=execute commands when a key is pressed, released or hold down  
URL:=http://cmdpad.sourceforge.net/index.php  
endef  
 
CONFIGURE_ARGS += \  
--enable-static \  
--enable-shared  
 
define Package/cmdpad/description  
cmdpad - execute commands when a key is pressed, released or hold down.  
Should be started from /etc/rc or /etc/rc.local. To run it as deamon you  
need to start it with '&'. All logs are printed to standard out and standard  
error (to write the log to disk use cmdpad > /var/log/cmdpad). Cmdpad  
searches for /etc/cmdpad.conf and load the key bindings. Then wait for  
key event and check each command to see if it should be run.  
endef  
 
MAKE_FLAGS += \  
$(TARGET_CONFIGURE_OPTS) \  
$(1)  
 
define Package/cmdpad/install  
$(INSTALL_DIR) $(1)/usr/sbin  
$(INSTALL_DIR) $(1)/etc  
$(INSTALL_DIR) $(1)/etc/init.d  
$(INSTALL_BIN) $(PKG_BUILD_DIR)/src/cmdpad $(1)/usr/sbin/  
$(INSTALL_CONF) $(PKG_BUILD_DIR)/src/cmdpad.conf $(1)/etc/  
$(INSTALL_BIN) ./files/cmdpad.init $(1)/etc/init.d/cmdpad  
endef  
 
define Package/cmdpad/conffiles  
/etc/cmdpad.conf  
endef  
 
$(eval $(call BuildPackage,cmdpad))  
 
#!/bin/sh /etc/rc.common  
# Copyright (C) 2007-2011 OpenWrt.org  
 
START=93  
 
SSD_DAEMONIZE=1  
 
start() {  
service_start /usr/sbin/cmdpad --quiet  
}  
 
stop() {  
service_stop /usr/sbin/cmdpad  
}  
 
--- cmdpad-0.0.3/src/Makefile.orig 2008-01-05 23:29:44.000000000 +0100  
+++ cmdpad-0.0.3/src/Makefile 2008-01-05 23:30:23.000000000 +0100  
@@ -5,25 +5,25 @@  
TOP=..  
include $(TOP)/Makefile.common  
 
-INCLUDE= -I/usr/include  
-LIBS= -L/usr/lib -lc  
-CFLAGS= -g3  
-LDFLAGS= -Xlinker -Map -Xlinker $(PROG).map #,--stack,16Mb  
+#INCLUDE= -I/usr/include  
+#LIBS= -L/usr/lib -lc  
+#CFLAGS= -g3  
+#LDFLAGS= -Xlinker -Map -Xlinker $(PROG).map #,--stack,16Mb  
OBJ= main.o command.o parse.o  
SCRIPTS= *.sh  
 
build: $(PROG)  
 
$(PROG): $(OBJ)  
- gcc -o $(PROG) $(OBJ) $(LIBS) $(LDFLAGS)  
+ $(GCC) -o $(PROG) $(OBJ) $(LIBS) $(LDFLAGS)  
@echo "==============================================="  
@echo "edit $(PROG).conf file to set default preferences"  
 
%.o : %.c  
- gcc $(CFLAGS) -D__COPYLEFT__='$(COPYLEFT)' -c $<  
+ $(GCC) $(CFLAGS) -D__COPYLEFT__='$(COPYLEFT)' -c $<  
 
%.o : %.c %.h  
- gcc $(CFLAGS) -D__COPYLEFT__='$(COPYLEFT)' -c $<  
+ $(GCC) $(CFLAGS) -D__COPYLEFT__='$(COPYLEFT)' -c $<  
 
distclean clean:  
rm $(PROG) *~ *.o -vf  
 
--- cmdpad-0.0.3/src/parse.orig 2008-01-05 23:55:32.000000000 +0100  
+++ cmdpad-0.0.3/src/parse.c 2008-01-05 23:56:07.000000000 +0100  
@@ -289,6 +289,12 @@  
pchEventDevice = strdup( pchValue) ;  
return 1 ;  
}  
+ if( (pchValue != NULL) &&  
+ (strncmp( pchValue, "/dev/event", 6) == 0) )  
+ {  
+ pchEventDevice = strdup( pchValue) ;  
+ return 1 ;  
+ }  
printf( "Option 'device' expects a /dev/input/eventX argument\n");  
return -1 ;  
}  
 
--- cmdpad-0.0.3/src/command.c.orig 2003-03-29 17:54:12.000000000 +0100  
+++ cmdpad-0.0.3/src/command.c 2008-01-12 05:41:22.000000000 +0100  
@@ -68,6 +68,7 @@  
 
void exec( char * command)  
{  
+ int status;  
if( fork() == 0) {  
char ** tmp ;  
int i ;  
@@ -88,6 +89,7 @@  
perror( "ERROR: execv") ;  
exit( 1) ;  
} // end if( fork())  
+ wait(&status);  
}  
 
int getNumberofEntry()  
 
--- a/src/parse.c  
+++ b/src/parse.c  
@@ -125,7 +125,7 @@ int readCommandLine( int argc, char *arg  
 
d2printf( "command line command %s found\n", pchCommandTranslations[ iCmd+1]) ;  
 
- vsnprintf( achCommand, sizeof( achCommand),  
+ snprintf( achCommand, sizeof( achCommand),  
pchCommandTranslations[ iCmd+1],  
&argv[ i+1]) ;  
 
 
#  
# This is free software, licensed under the GNU General Public License v2.  
# See /LICENSE for more information.  
#  
 
include $(TOPDIR)/rules.mk  
 
PKG_NAME:=triggerhappy  
PKG_VERSION:=0.3.4  
PKG_REV:=cb3ed9ba849ff5926fa47fd1ae042fa0083edaf5  
PKG_RELEASE:=1  
 
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz  
PKG_SOURCE_URL:=git://github.com/wertarbyte/triggerhappy  
PKG_SOURCE_PROTO:=git  
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)  
PKG_SOURCE_VERSION:=$(PKG_REV)  
 
include $(INCLUDE_DIR)/package.mk  
 
define Package/triggerhappy  
SECTION:=utils  
CATEGORY:=Utilities  
TITLE:=handle input events and run configured programs  
URL:=http://github.com/wertarbyte/triggerhappy  
endef  
 
define Package/triggerhappy/description  
triggerhappy - handle input events and run configured programs  
The daemon thd can handle hotplugged input devices and is configured through  
simple configuration files in /etc/triggerhappy/triggers.d/.  
endef  
 
MAKE_FLAGS += \  
$(TARGET_CONFIGURE_OPTS) \  
$(1)  
 
define Package/triggerhappy/install  
$(INSTALL_DIR) $(1)/usr/sbin  
$(INSTALL_DIR) $(1)/etc  
$(INSTALL_DIR) $(1)/etc/init.d  
$(INSTALL_DIR) $(1)/etc/triggerhappy  
$(INSTALL_DIR) $(1)/etc/triggerhappy/triggers.d/  
$(INSTALL_DIR) $(1)/etc/hotplug.d/input/  
$(INSTALL_BIN) $(PKG_BUILD_DIR)/thd $(1)/usr/sbin  
$(INSTALL_BIN) $(PKG_BUILD_DIR)/th-cmd $(1)/usr/sbin  
$(INSTALL_BIN) ./files/triggerhappy.init $(1)/etc/init.d/triggerhappy  
$(INSTALL_BIN) ./files/triggerhappy.hotplug $(1)/etc/hotplug.d/input/10-triggerhappy  
$(INSTALL_BIN) ./files/triggerhappy-example.conf $(1)/etc/triggerhappy/triggers.d/example.conf  
endef  
 
$(eval $(call BuildPackage,triggerhappy))  
 
# This is an example configuration for the triggerhappy daemon (thd)  
# please note that every file to be processed must end in ".conf"  
#  
# To view a list of supported event codes, use "thd --listevents" or  
# "thd --dump /dev/input/event*"  
#  
# Format:  
# <eventcode> <value> <command>  
#  
# values for key events are 1 (pressed), 0 (released) or 2 (held)  
#  
## control an mpd instance  
# KEY_NEXTSONG 1 /usr/bin/mpc next  
# KEY_PREVSONG 1 /usr/bin/mpc prev  
 
#!/bin/sh  
THD_SOCKET=/tmp/triggerhappy.socket  
[ -S "$THD_SOCKET" ] || exit  
 
case "$ACTION" in  
add)  
DEVICE="/dev/$DEVNAME"  
[ -c "$DEVICE" ] || exit  
# offer device to triggerhappy daemon  
/usr/sbin/th-cmd --socket "$THD_SOCKET" --add "$DEVICE"  
;;  
remove)  
# nothing to do  
;;  
esac  
 
#!/bin/sh /etc/rc.common  
START=93  
 
start() {  
/usr/sbin/thd --socket /tmp/triggerhappy.socket --triggers /etc/triggerhappy/triggers.d/ --daemon /dev/input/event*  
}  
 
stop() {  
/usr/sbin/th-cmd --socket /tmp/triggerhappy.socket --quit  
}  
 
--- a/Makefile  
+++ b/Makefile  
@@ -10,7 +10,7 @@ THCMD_COMPS := th-cmd cmdsocket  
 
MAKEDEPEND = $(CC) -M -MG $(CPPFLAGS) -o $*.d $<  
 
-LINUX_INPUT_H := $(shell echo '\#include <linux/input.h>' | $(CC) $(CPPFLAGS) -M -E - | awk 'NR==1 {print $$2}')  
+LINUX_INPUT_H := $(shell for i in `echo | $(CC) $(CPPFLAGS) -M -E -include 'linux/input.h' -`; do test -f "$$i" && echo "$$i" && break; done)  
 
all: thd th-cmd man  
 
 
file:a/utils/zile/Makefile (deleted)
#  
# Copyright (C) 2006-2011 OpenWrt.org  
#  
# This is free software, licensed under the GNU General Public License v2.  
# See /LICENSE for more information.  
#  
 
include $(TOPDIR)/rules.mk  
 
PKG_NAME:=zile  
PKG_VERSION:=2.3.24  
PKG_RELEASE:=1  
 
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz  
PKG_SOURCE_URL:=@GNU/zile  
PKG_MD5SUM:=fe77d801ba69e0fb9b4914a04b9ff506  
 
PKG_INSTALL:=1  
 
include $(INCLUDE_DIR)/package.mk  
 
define Package/zile  
SECTION:=utils  
CATEGORY:=Utilities  
DEPENDS:=+libncursesw  
TITLE:=very small emacs-like editor  
URL:=http://www.gnu.org/software/zile/  
SUBMENU:=Editors  
endef  
 
define Package/zile/description  
Zile is a small Emacs clone. Zile is a customizable, self-documenting  
real-time display editor. Zile was written to be as similar as possible  
to Emacs; every Emacs user should feel at home with Zile.  
endef  
 
CONFIGURE_VARS += \  
gl_cv_func_getopt_gnu=yes  
 
define Package/zile/install  
$(INSTALL_DIR) $(1)/usr/bin  
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/$(PKG_NAME) $(1)/usr/bin/  
endef  
 
$(eval $(call BuildPackage,zile))  
 
comments