Articles of Linux操作系统

系统dbus不允许使用conf文件冲出所有权

我正在尝试创build一个在系统总线上运行的守护程序服务,在这个服务中,发送和接收这个服务的权限应该完全公开给任何人。 (安全不是这项服务的关注)。 当我尝试使用QtDbus(使用PyQt)注册服务时,出现以下错误:由于configuration文件中的安全策略,“Connection”:1.0“不允许拥有服务”org.dbus.arduino“ 。 这个其他堆栈溢出具有相同的错误,但由于某种原因在这种情况下根本没有帮助。 dbus_bus_request_name():不允许连接拥有该服务 。 通常情况下,你应该离开system.conf文件,并在system.d目录中添加你的权限“打出”configuration文件。 我已经这样做了,但似乎没有改变任何东西,无论我如何开放权限。 事实上,我几乎是积极的,不改变任何东西! 这是我的conf文件,因为它现在是正确的。 <!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN" "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd"> <busconfig> <policy user="myUser"> <allow own="*"/> <allow own="org.dbus.arduino"/> <allow send_type="method_call" log="true"/> </policy> <policy user="root"> <allow own="*"/> <allow own="org.dbus.arduino"/> <allow send_type="method_call" log="true"/> </policy> <policy context="default"> </policy> </busconfig> 即使我做了这样或那样的事情,它仍然不起作用。 <busconfig> <policy context="default"> <allow own="*"/> <allow own="org.dbus.arduino"/> <allow send_type="method_call" […]

试图只删除非ASCII字符

我试图操纵一个文本文件,并从文本中删除非ASCII字符。 我不想删除该行。 我只想删除有问题的字符。 我正试图让下面的expression式工作: sed '/[\x80-\xFF]/d'

为什么我会在一个terminal上获得“暂停(tty输出)”,而在其他terminal却不能?

显然,我在tcsh shell中做了一些奇怪的事情,现在每当我在后台打印标准输出的应用程序被暂停(停止)的时候。 奇怪的是,这种行为只发生在这个terminal上; 如果我在另一个terminal上做同样的事情,应用程序只是在后台运行,并将其输出到terminal。 在“破”的terminal,我必须把暂停的应用程序回到前台(与fg )让它继续。 例: thehost:/tmp/test1(277)> ls -l & [3] 1454 thehost:/tmp/test1(278)> [3] + Suspended (tty output) ls –color=auto -l thehost:/tmp/test1(278)> fg ls –color=auto -l total 0 thehost:/tmp/test1(279)> 在另一个terminal执行相同的命令工作正常: thehost:/tmp/test1(8)> ls -l & [1] 2280 thehost:/tmp/test1(9)> total 0 [1] Done ls –color=auto -l thehost:/tmp/test1(9)> 在受影响的terminal启动一个bash也不能解决这个问题: thehost:/tmp/test1(280)> bash oliver@thehost:/tmp/test1$ ls -l & [1] 2263 […]

使用dlopen和dlsym使用-fPIC编译C程序

我有一个错误的符号parsing的问题。 我的主程序用dlsym加载了一个dlopen共享库和一个来自它的符号。 程序和库都是用C库代码编写的 int a(int b) { return b+1; } int c(int d) { return a(d)+1; } 为了使它在64位机器上工作,-fPIC在编译时传递给gcc。 该计划是: #include <dlfcn.h> #include <stdio.h> int (*a)(int b); int (*c)(int d); int main() { void* lib=dlopen("./libtest.so",RTLD_LAZY); a=dlsym(lib,"a"); c=dlsym(lib,"c"); int d = c(6); int b = a(5); printf("b is %dd is %d\n",b,d); return 0; } 如果程序不是用-fPIC编译的话,一切运行正常,但是当用-fPIC编译程序时,程序崩溃时会出现分段错误。 调查发现,坠机是由于符号a的错误parsing。 当调用a时会发生崩溃,无论是从库还是主程序(后者通过在主程序中注释掉调用c()的行来获得)。 […]

在C中closuresTCP侦听套接字

假设你有一个侦听TCP端口的套接字,并且有一些客户端被连接。 当在C中发出sock_close(fd)并尝试在同一个端口上再次绑定时,绑定失败。 在“netstat -plutnoa”中可以看到一些TIME_WAIT状态,例如: tcp 0 0 127.0.0.1:4567 127.0.0.1:32977 TIME_WAIT – timewait (17.12/0/0) 那么,如何正确断开服务器套接字并立即重新连接到相同的端口?

我如何以编程方式重新启动一个系统服务(而不是apache)从Linux中的Apache?

我需要简单的方法来允许最终用户从同一个框中的apache服务的网页重新启动tomcat。 我们试图让我们的QC部门轻松地将我们的webapp的新版本部署到apache。 我们使用samba,但是我们需要一个简单的方法让他们在部署之前/之后停止/启动tomcat服务器。 这只会用于内部的盒子。 有没有现有的解决scheme呢? 还是会更容易写一些快速的PHP应用程序来处理这个?

linux curl另存为utf-8

尝试使用Linuxcurl从URL下载XML文件。 很确定这个xml是用UTF-8编码的, 怀疑curl -o不保存为UTF-8。 无论如何强制保存为UTF-8curl? 感谢您的build议,我发现: 由于XML feed是dynamic的,并不是所有的时候都包含任何utf-8字符。 有时即使它在xml编码和标题内容types中设置为utf-8,它在整个内容中也没有utf-8字符:charset = utf-8。 当它至less包含一个utf-8字符时,它将被保存为utf-8。 当发生这种情况时,curl不会以utf-8的forms下载,因为没有utf-8字符,这是有道理的,为什么需要存储为utf-8。 这是非常棘手的,一些validation器必须对utf-8有效,因此我仍然需要一个解决scheme来强制它为utf8,因为默认情况下,我所有的xml shld都是utf8编码。 尝试build议通过使用iconv f iso8859-1 utf-8不适用于这种情况下,因为我怀疑它不在iso8859-1也不是。 仍然需要更好的解决scheme。

请解释这个链接错误:在.rodata节中引用

我正在做一个32位SLES10机器。 使用GCC 3.4.2 这是一个示例错误 `.L8245' referenced in section `.rodata' of CMakeFiles/myproj.dir/c++/util/MyObj.o: defined in discarded section `.gnu.linkonce.t._ZN5boost9re_detail9reg_grep2INS0_21grep_search_predicateIPKcSaIcEEES4_cNS_12regex_traitsIcEES5_S5_EEjT_T0_SA_RKNS_14reg_expressionIT1_T2_T3_EEjT4_' of CMakeFiles/myproj.dir/c++/util/MyObj.o

Linux串行端口:阻塞读取超时

我已经学习了许多有用的线程和一些教程,但我仍然有一些应该是非常简单的问题。 这里有一些我已经读过的线索供参考: 如何在读取函数调用中实现超时? 如何从C中的串口打开,读取和写入 无论如何,我有一个问题。 我的代码工作正常,如果我收到数据。 如果我不这样做,read()函数就会停止,唯一的办法就是使用kill -9(注意:我使用信号处理来向读取串行数据的线程发送信号来终止。肇事者,read()调用仍然停止,即使我已经删除了我的信号处理)。 我想要做的是读取一次阻塞并读取块(因此节省CPU使用),但是如果读取没有收到数据,我不想超时。 以下是我正在应用到端口的设置: struct termios serial_struct; serial_struct.c_cflag = B115200 | CS8 | CLOCAL | CREAD; serial_struct.c_iflag = IGNPAR; serial_struct.c_oflag = 0; serial_struct.c_lflag = 0; serial_struct.c_cc[VTIME] = 1; // timeout after .1s that isn't working serial_struct.c_cc[VMIN] = 64; // want to read a chunk of 64 bytes at a […]

Linux ptrace如何不安全或包含竞争条件?

我想通过ptrace()开始一个进程,并且所有的subprocess创build一个沙盒(包括孙辈等)。 ptrace()父进程,即主pipe。 将是一个简单的C或Python程序,从概念上讲,它将限制文件系统访问(基于path名和访问方向(读取或写入)和套接字访问(例如,不允许套接字创build))。 我应该注意什么,以便ptrace() d进程及其subprocess(recursion)不能绕过沙箱? 在fork()时间,主pipe应该做什么特殊的事情来避免竞争? 有没有可能从subprocess中读取例如rename()的文件名参数而没有竞争条件? 这是我已经计划要做的事情: PTRACE_O_TRACEFORK | PTRACE_O_TRACEVFORK | PTRACE_O_TRACECLONE PTRACE_O_TRACEFORK | PTRACE_O_TRACEVFORK | PTRACE_O_TRACECLONE在fork()时避免(某些)种族PTRACE_O_TRACEFORK | PTRACE_O_TRACEVFORK | PTRACE_O_TRACECLONE 默认情况下禁止所有的系统调用,并组成允许的系统调用的白名单 确保*at()系统调用变体(如openat )得到了适当的保护 还有什么我应该注意的?