#include <linux/limits.h>
#include <linux/dcache.h>
#include <linux/syscalls.h>
+#include <linux/vserver/cvirt.h>
#include <asm/uaccess.h>
#include <asm/processor.h>
.maxlen = sizeof(system_utsname.sysname),
.mode = 0444,
.proc_handler = &proc_doutsstring,
+ .virt_handler = &vx_uts_virt_handler,
.strategy = &sysctl_string,
},
{
.maxlen = sizeof(system_utsname.release),
.mode = 0444,
.proc_handler = &proc_doutsstring,
+ .virt_handler = &vx_uts_virt_handler,
.strategy = &sysctl_string,
},
{
.maxlen = sizeof(system_utsname.version),
.mode = 0444,
.proc_handler = &proc_doutsstring,
+ .virt_handler = &vx_uts_virt_handler,
.strategy = &sysctl_string,
},
{
.maxlen = sizeof(system_utsname.nodename),
.mode = 0644,
.proc_handler = &proc_doutsstring,
+ .virt_handler = &vx_uts_virt_handler,
.strategy = &sysctl_string,
},
{
.maxlen = sizeof(system_utsname.domainname),
.mode = 0644,
.proc_handler = &proc_doutsstring,
+ .virt_handler = &vx_uts_virt_handler,
.strategy = &sysctl_string,
},
{
int proc_dostring(ctl_table *table, int write, struct file *filp,
void __user *buffer, size_t *lenp, loff_t *ppos)
{
- size_t len;
+ size_t len, maxlen;
char __user *p;
char c;
-
+ void *data;
+
+ data = table->data;
+ maxlen = table->maxlen;
+ if (table->virt_handler)
+ table->virt_handler(table, write, filp->f_xid, &data, &maxlen);
+
if (!table->data || !table->maxlen || !*lenp ||
(*ppos && !write)) {
*lenp = 0;
return 0;
}
-
+
if (write) {
len = 0;
p = buffer;
break;
len++;
}
- if (len >= table->maxlen)
- len = table->maxlen-1;
- if(copy_from_user(table->data, buffer, len))
+ if (len >= maxlen)
+ len = maxlen-1;
+ if(copy_from_user(data, buffer, len))
return -EFAULT;
- ((char *) table->data)[len] = 0;
+ ((char *) data)[len] = 0;
*ppos += *lenp;
} else {
- len = strlen(table->data);
- if (len > table->maxlen)
- len = table->maxlen;
+ len = strlen(data);
+ if (len > maxlen)
+ len = maxlen;
if (len > *lenp)
len = *lenp;
if (len)
- if(copy_to_user(buffer, table->data, len))
+ if(copy_to_user(buffer, data, len))
return -EFAULT;
if (len < *lenp) {
if(put_user('\n', ((char __user *) buffer) + len))