小编Cra*_*tis的帖子

使用 setcap 功能运行时 JLI_InitArgProcessing 的 Java“符号查找错误”

我们在旨在监控网络接口流量的服务器上安装了 Java 11。

初始安装 ( yum install java-11-openjdk-devel.x86_64) 后,该java命令对root普通用户都可以正常工作

但是,我们的 Java 应用程序不会以 root 身份运行。然后我们运行:

setcap cap_net_raw,cap_net_admin=eip /path/to/java
Run Code Online (Sandbox Code Playgroud)

它设置了功能,并且java -versionroot身份运行可以正常工作。

但是在运行 setcap 之后,当我尝试以java -version普通用户身份运行时,我看到:

java: symbol lookup error: java: undefined symbol: JLI_InitArgProcessing
Run Code Online (Sandbox Code Playgroud)

这似乎是此处讨论的预期安全保护:Linux 功能 (setcap) 似乎禁用 LD_LIBRARY_PATH

但我的问题是:如何允许java在普通用户帐户下使用这些功能(网络数据包捕获)?

注意:通过取消设置功能setcap -r /path/to/java允许普通用户java再次运行- 因此问题与功能无关。

java unix permissions packet-capture linux-capabilities

2
推荐指数
1
解决办法
1070
查看次数

使用 Jest 模拟简单的内部函数以用于渲染的 React 组件

我有一个简单的用下面的程序做出反应App.jsApp.test.jsutils.js文件:

应用程序.js

import React from 'react';
import { randomNameGenerator } from './utils.js';
import './App.css';

function App() {
  return (
    <div>
      {randomNameGenerator()}
    </div>
  );
}

export default App;
Run Code Online (Sandbox Code Playgroud)

App.test.js

import React from 'react';
import { render } from '@testing-library/react';
import '@testing-library/jest-dom/extend-expect'
import App from './App';

it('allows Jest method mocking', () => {
  const { getByText } = render(<App />);
  expect(getByText("Craig")).toBeInTheDocument()
});
Run Code Online (Sandbox Code Playgroud)

实用程序.js

export function randomNameGenerator() {
    return Math.floor((Math.random() * 2) + 1) == 1 ? …
Run Code Online (Sandbox Code Playgroud)

javascript unit-testing mocking reactjs jestjs

2
推荐指数
1
解决办法
3165
查看次数

在Objective-C中自动释放和"分配"属性?(在iPhone上)

我有一个UITableView的实例,以及一个遵循委托和数据源协议的独立类.我这样做是这样的:

SubjectTableViewHandler *handler = [[[SubjectTableViewHandler alloc] init] retain];
tv.delegate = handler;
tv.dataSource = handler;
[handler autorelease];
Run Code Online (Sandbox Code Playgroud)

我不想将处理程序维护为ivar,如果我retain在结束时取消呼叫,当autorelease发生时,它会被发送release,然后被添加到池中,这会导致EXC_BAD_ACCESS.所以目前,保留计数是:

(1) At init: 1
(2) At retain: 2
(3) delegate/datasource properties are 'assign', still 2
(4) At autorelease: 1, now in autorelease pool.
Run Code Online (Sandbox Code Playgroud)

但是,由于属性是'assign',它们永远不会被释放,保留计数永远不会达到0,并且处理程序永远不会被解除分配.有没有更有效的方法来实现这一点,而不是将处理程序维护为ivar并在dealloc方法中释放它?

iphone memory-management properties objective-c autorelease

1
推荐指数
1
解决办法
2449
查看次数

访问协议的属性值?

嘿伙计们,我有一个定义了许多ObjC-2.0属性的协议,如下所示:

@protocol Repeatable <NSCoding>
@required
@property (nonatomic, retain) Date *startDate;
@property (nonatomic, retain) Date *endDate;
@end
Run Code Online (Sandbox Code Playgroud)

我有另一个实现协议的类:

@interface AbstractRepeatable : NSObject <Repeatable>
Run Code Online (Sandbox Code Playgroud)

最后,在AbstractRepeatable中,我正在实现一个由协议定义的方法:

- (BOOL)isEqualToRepeatable:(Repeatable *)r {
    if (r.startDate != startDate) // Compiler error here
        return NO;
    return YES;
}
Run Code Online (Sandbox Code Playgroud)

例如,排除了比特和碎片,但是在编译时,我会在上面提到的行上收到熟悉的"成员'startDate'请求,而不是结构或联合".AbstractRepeatable显然包含Repeatable标头,否则协议将不可见,所以我不知道我缺少哪个部分.

iphone macos xcode properties objective-c

1
推荐指数
1
解决办法
295
查看次数

确定UITableViewCell是否正在从"swipe"或"self.editButton"进行编辑

我正在尝试确定UITableViewCell子类是否处于编辑模式,从用户的滑动(在这种情况下我不需要缩进我的子视图)或用户按下与UITableViewController关联的"编辑"按钮.(在这种情况下,我这样做.)

从单元格的角度来看,我知道这是可能的,因为self.textLabel视图会自动缩进.我试过了:

-(void)layoutSubviews {
   [super layoutSubviews];

   CGRect labelFrame = self.textLabel.frame;
   labelFrame.origin.x += 5;
   myCustomUILabel.frame = labelFrame;
}
Run Code Online (Sandbox Code Playgroud)

但我的自定义标签没有正确缩进.(虽然self.textLabel视图确实如此?)

我想避免以下情况:

  • 为单元格提供对父表的引用.
  • 覆盖UITableViewController类中的方法,让单元格知道它们是单独编辑还是整个表正在编辑.

iphone cocoa-touch uitableview

1
推荐指数
1
解决办法
1518
查看次数

"test -v $ TESTENV"总是假,即使定义了TESTENV

我在Fedora 27下运行Bash 4.4.19,我有一个简单的脚本:

#!/bin/bash
TESTENV="Hello"
echo "$TESTENV"
if [ -v $TESTENV ]; then
    echo "Yup"
fi
echo "Done"
Run Code Online (Sandbox Code Playgroud)

当我运行它时,它打印:

Hello
./myscript: line 3: [: Hello: binary operator expected
Done
Run Code Online (Sandbox Code Playgroud)

所以,我将额外的括号添加到第3行,现在看起来像:

if [[ -v $TESTENV ]]; then
Run Code Online (Sandbox Code Playgroud)

但产生:

Hello
Done
Run Code Online (Sandbox Code Playgroud)

是什么赋予了?我希望看到上面一个/两个的"Yup".我试过"$TESTENV"用引号括起来,而且我也尝试过-z运算符 - 但行为是一样的.

bash shell if-statement

0
推荐指数
1
解决办法
53
查看次数